<protected-views>应该用于JSF 2.2 CSRF保护吗?</protected-views>

时间:2014-11-17 09:28:20

标签: security jsf csrf jsf-2.2 protected-views

我很困惑。 我看到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保护?

1 个答案:

答案 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