与 MyFaces / JSF 一起使用<protected-views> 时没有生成 CSFR 令牌(javax.faces.Token)

问题描述 投票:0回答:1

在 faces-config.xml 中

  <protected-views>
        <url-pattern>*.xhtml</url-pattern> #or more specific URL pattern
  </protected-views>

但没有生成令牌 (protected.xhtml?javax.faces.Token=) 并将其附加到 URL,如下所述: 例子

我只在 URL 中看到 jsessionid 参数,例如 (localhost:8080/x/y/z;jsessionid=mVpYT) 因此,在 org.apache.myfaces.lifecycle.RestoreViewExecutor.checkViewProtection(RestoreViewExecutor.java:396) 中出现了预期的 javax.faces.application.ProtectedViewException,我猜这是这种保护机制的重点。

我正在使用 myfaces-api 和核心版本:2.3.10.

我错过了什么?谢谢..

jsf csrf myfaces csrf-token
1个回答
0
投票

我意识到该机制仅适用于来自同一应用程序的另一个页面的链接,如果您直接调用受保护的站点则不适用,例如。在外部或通过浏览器的 URL 栏。

那是因为token必须事先生成,并且会像这样包含在链接中

<a href="/availability/login.xhtml?javax.faces.Token=8E1DC107DDAF85A5FD4AFC05AB515B4D">Get Link to Login</a>

这也意味着页面只能通过这些 而不是 JSF 的任何 commandButton 或 commandLink 访问。否则你会得到 ProtectedViewException 因为缺少令牌。

我防止 CSRF 的更好方法是避免 就像这里解释的那样.. 应该用于 JSF 2.2 CSRF 保护吗?

© www.soinside.com 2019 - 2024. All rights reserved.