【问题标题】:CSRF Validation Token: session id safe?CSRF 验证令牌:会话 id 安全吗?
【发布时间】:2010-10-05 19:43:24
【问题描述】:

在 asp.net 中,我正在实现一个 IHttpModule 来缓解 CSRF 攻击。它向响应 html 中注入一个隐藏的表单参数,其中包含 GET 上的 asp.net SessionID。然后在 POST 上检查以确保隐藏参数的值与当前 SessionID 匹配。据我所知,获取 SessionID 值的唯一方法是从 cookie 中获取,恶意站点无法读取或确定该 cookie。有什么我忽略的吗?

【问题讨论】:

    标签: asp.net security csrf


    【解决方案1】:

    这种方法是正确的。您需要确保通过 GET 操作可用的所有操作都是“安全的”(无论如何这是最佳实践),因为您仅将 XSRF 保护应用于 POST。

    为了额外的保险,您也可以在 GET 上使用它(通过向所有链接添加 URL 参数,并在每个 GET 请求中检查它),但这很麻烦。

    如果您比较偏执,您可以为备用 ID 选择不同的随机数。即使浏览器错误地使您的会话 cookie 可被其他站点上的某些恶意 Javascript 访问,这也可以保护您。创建会话时,选择另一个大的随机数并将其存储在您的会话中。

    【讨论】:

    • 我现在可能不会担心 GET,因为 http 更改状态是无效的(但显然是可能的)。只要我们保持该约定/标准,我们就应该没问题。我可能会考虑使用 SessionID 以外的值来获得您提到的额外安全性 - 谢谢。
    【解决方案2】:

    理想情况下,您希望使用会话 ID 以外的其他内容,但基本上就是这样。 OWASP 建议使用存储在用户会话中的随机表单元素名称。这样攻击者甚至无法伪造正确的隐藏字段。

    http://www.owasp.org/index.php/Top_10_2007-A5#Protection

    【讨论】:

    • 随机化表单元素名称是一个有趣的想法。感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2015-08-17
    • 1970-01-01
    • 2010-09-13
    • 2017-03-20
    • 2015-12-10
    • 2014-10-27
    相关资源
    最近更新 更多