7

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

4

2 回答 2

8

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

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

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

于 2009-02-05T23:03:08.473 回答
6

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

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

于 2009-02-05T23:01:46.980 回答