在 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.
我错过了什么?谢谢..
我意识到该机制仅适用于来自同一应用程序的另一个页面的链接,如果您直接调用受保护的站点则不适用,例如。在外部或通过浏览器的 URL 栏。
那是因为token必须事先生成,并且会像这样包含在链接中
<a href="/availability/login.xhtml?javax.faces.Token=8E1DC107DDAF85A5FD4AFC05AB515B4D">Get Link to Login</a>
这也意味着页面只能通过这些
我防止 CSRF 的更好方法是避免