gpt4 book ai didi

jsf-2 - 在其他 session 中重用 ViewState 值 (CSRF)

转载 作者:行者123 更新时间:2023-12-03 00:26:20 25 4
gpt4 key购买 nike

我正在使用 *myfaces-api-2.2.3,并将 javax.faces.STATE_SAVING_METHOD 设置为 client

我得到了以下场景,

1) 用户 X 登录系统并添加用户 XXX(使用 jsf f:ajax 操作),在检查 chrome 开发工具时,您可以看到与 ViewState 值。

2) 复制该 ViewState 值(从 chrome 开发工具 --> 网络选项卡)--> 将其放入带有表单的 html 文件中(模仿我原来的< em>添加用户 X)

3) 从用户 X session 注销( session 在此过程中失效)

4) 使用用户 Y 登录 --> 在浏览器中打开 那个 html 文件并点击表单的提交按钮 --> 您会注意到用户 XXX 是添加(尽管表单中使用的 ViewState 值属于其他用户(用户 X)。

我认为ViewState值不能以这种方式使用,并且我认为它应该防止这种行为,为什么可以使用一个ViewState 值在一个拥有自己的 ViewState 值的全新 session 中,如何确保用户无法重用 ViewState

<小时/>

请参阅我的其他问题和 BalusC答案:Prevent CSRF in JSF2 with client side state saving

最佳答案

这是使用客户端状态保存时指定/预期的行为。 JSF View 状态不保存在 session 中,而是全部保存在客户端 HTML 表单的隐藏输入字段中。仅当使用服务器端状态保存时,JSF View 状态在用户的 HTTP session 中不存在时才会失效。

我没有看到any way在 MyFaces 中使客户端保存的状态无效,以防它在回发期间与“错误” session 重新关联。 org.apache.myfaces.CLIENT_VIEW_STATE_TIMEOUT 上下文参数很接近。您可以将其设置为与 session 超时相同的时间。

CSRF 攻击场景在我看来有点夸张。首先,攻击者需要能够掌握客户端状态。最简单的方法是 XSS 漏洞。只是,JSF 到处都有 XSS 攻击防护(如果您小心使用 escape="false")。最难的方法是掌握整个 HTML 输出。这可以通过中间人攻击来完成。只是,这也为攻击者提供了整个 session cookie,因此在这种情况下,整个 CSRF 攻击场景对于攻击者来说“不必要地过于复杂”,因为攻击者可以简单地劫持 session 。对此的最佳保护就是使用 HTTPS 而不是 HTTP。

即使如此,如果攻击者以某种方式掌握了客户端 View 状态,则在不解密、反序列化和操纵它的情况下,攻击者无法用它做很多危险的事情。 MyFaces 默认对其进行长时间加密(从 2.0.x 早期开始)。如果没有正确的 key ,攻击者就无法解密它,因此也无法操纵它。顺便说一下,这种客户端 View 状态加密已成为 JSF 2.2 规范的必需部分(因此 Mojarra 也这样做了)。当您重新启动应用程序服务器时,该键默认会重置(因此所有客户端状态也将失效)。如果需要,您可以通过 web.xml 中的以下环境条目指定固定键:

<env-entry>
<env-entry-name>jsf.ClientSideSecretKey</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>[AES key in Base64 format]</env-entry-value>
</env-entry>

您可以使用this page生成 Base64 格式的随机 AES key 。

即使如此,如果攻击者以某种方式成功解密 View 状态并让另一个用户实际提交它(例如通过 XSS 漏洞或网络钓鱼站点),那么最好的选择是在中包含基于 HTTP session 的 CSRF token JSF 页面。但如果 Web 应用程序在某处仍然存在 XSS 攻击漏洞,或者通过 HTTP 而不是 HTTPS 提供服务,那么这也是不安全的。

另请参阅:

关于jsf-2 - 在其他 session 中重用 ViewState 值 (CSRF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30373089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com