<protected-views> 是不是应该用于 JSF 2.2 CSRF 保护?

Posted

技术标签:

【中文标题】<protected-views> 是不是应该用于 JSF 2.2 CSRF 保护?【英文标题】:Should <protected-views> be used for JSF 2.2 CSRF protection?<protected-views> 是否应该用于 JSF 2.2 CSRF 保护? 【发布时间】:2015-01-14 04:07:04 【问题描述】:

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

&lt;protected-views&gt; 是否应该用于 JSF 2.2 CSRF 保护?

【问题讨论】:

【参考方案1】:

我很困惑。 我看到 JSF 2.0 具有隐式 CSRF 保护: How JSF 2.0 prevents CSRF

这种隐式保护仅适用于 POST 请求(即带有 &lt;h:form&gt; 的页面)。


另一方面,根据文章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 请求也有效(即带有 &lt;f:viewAction&gt; 的页面,这也是自 JSF 2.2 以来的新功能)。每当您使用 &lt;h:link&gt;&lt;h:button&gt; 创建指向这些页面的 GET 链接/按钮时,带有自动生成令牌值的新 GET 请求参数 javax.faces.Token 将附加到生成的 HTML 输出中的 URL,此参数将是当相关页面在&lt;protected-views&gt; 中声明时需要。


&lt;protected-views&gt; 应该用于 JSF 2.2 CSRF 保护吗?

仅在您希望 CSRF 保护的带有 &lt;f:viewAction&gt; 的页面上。带有&lt;h:form&gt; 的那些已经受到javax.faces.ViewState 隐藏输入字段的隐式保护,前提是您没有通过&lt;f:view transient="true"&gt; 关闭JSF 视图状态。另见 a.o. CSRF, XSS and SQL Injection attack prevention in JSF.

【讨论】:

何时/为什么需要保护带有 &lt;f:viewAction&gt; 的页面(在 GET 请求上)免受 CSRF 攻击? @Tiny:我也想知道。 GET 请求根据定义是幂等的。另见 a.o. owasp.org/index.php/…

以上是关于<protected-views> 是不是应该用于 JSF 2.2 CSRF 保护?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 点击怎么获取自己是第几个?

html中 <dl> </dl> 代码是代表啥意思?

设置 <table> 格式的最佳方法是啥? [关闭]

html 中如何在table标签中添加一个编号列呢?就是第一行编号是1,第二行编号是2,以此类推

什么是 template<> template<typename T> 语法?

HTML的属性