我很困惑。 我看到JSF 2.0具有隐含的CSRF保护: How JSF 2.0 prevents CSRF
另一方面,根据文章http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JSF-CSRF-Demo/JSF2.2CsrfDemo.html,我们应该将以下元素添加到带有JSF页面列表的faces-config.xml
文件中。
<protected-views>
<url-pattern>/csrf_protected_page.xhtml</url-pattern>
</protected-views>
<protected-views>
是否应该用于JSF 2.2 CSRF保护?
答案 0 :(得分:16)
我很困惑。 我看到JSF 2.0具有隐含的CSRF保护: How JSF 2.0 prevents CSRF
此隐式保护仅适用于POST请求(即具有<h:form>
的页面)。
另一方面,根据文章http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JSF-CSRF-Demo/JSF2.2CsrfDemo.html,我们应该将以下元素添加到带有JSF页面列表的
faces-config.xml
文件中。<protected-views> <url-pattern>/csrf_protected_page.xhtml</url-pattern> </protected-views>
此保护对GET请求也有效(即<f:viewAction>
页面,这是自JSF 2.2以来的新内容)。每当您使用<h:link>
或<h:button>
为这些页面创建GET链接/按钮时,具有自动生成的标记值的新GET请求参数javax.faces.Token
将附加到生成的HTML中的URL当有问题的页面在<protected-views>
中声明时,将需要输出和此参数。
<protected-views>
是否应该用于JSF 2.2 CSRF保护?
仅适用于<f:viewAction>
您希望CSRF保护的网页。 <h:form>
隐藏输入字段已隐式保护javax.faces.ViewState
隐藏输入字段,前提是您没有按<f:view transient="true">
关闭JSF视图状态。另见a.o. CSRF, XSS and SQL Injection attack prevention in JSF