我正在研究我经常听到的东西,当你在 JSF 2.0 中做一个 webapp 时,你已经受到保护,免受跨站 - 脚本和 - 请求伪造。SO帖子的以下摘录证实了这一点:
在 JSF 2.0 中,这已通过使用长而强大的自动生成值而不是相当可预测的序列值来改进,从而使其成为一种强大的 CSRF 预防措施。
有人可以提供更多细节吗?这个自动生成的值如何防止 CSRF?谢谢!
我正在研究我经常听到的东西,当你在 JSF 2.0 中做一个 webapp 时,你已经受到保护,免受跨站 - 脚本和 - 请求伪造。SO帖子的以下摘录证实了这一点:
在 JSF 2.0 中,这已通过使用长而强大的自动生成值而不是相当可预测的序列值来改进,从而使其成为一种强大的 CSRF 预防措施。
有人可以提供更多细节吗?这个自动生成的值如何防止 CSRF?谢谢!
这个自动生成的值如何防止 CSRF ?
因为猜不透。因此攻击者无法以攻击网站的形式将其硬编码在隐藏字段中(除非目标网站存在XSS漏洞,因此可以简单地通过XSS手段直接获取该值)。如果该值对 JSF 无效,那么从攻击网站提交的表单将不会被处理,而是会生成一个ViewExpiredException
. 请注意,攻击者仍然需要获取会话 ID,以便可以通过jsessionid
URL 属性将其传回,因此最初“弱”的 CSRF 保护仍然需要一些 XSS 漏洞来获取会话 ID。
毕竟,我的印象是你根本不明白 CSRF 是什么;如果您了解 CSRF 是什么,答案是不言自明的。在这种情况下,请检查以下问题:在不需要用户登录的 POST 表单中,我是否面临 CSRF 攻击的风险?
要记住的一件事是 JSF 2.0 中的 CSRF 保护是隐式的,并且仅对 POST 请求有效。
在 JSF 2.2 中将对此提供更明确的支持。我在这里简要解释了这一点:http: //arjan-tijms.omnifaces.org/p/jsf-22.html