2009-02-05 71 views
7

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

回答

8

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

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

如果您是偏执偏执的人,您可以为替代ID选择一个不同的随机数。即使浏览器错误地将您的会话cookie访问到其他网站上的某些敌对Javascript,也可以保护您。创建会话时,选择另一个大的随机数并将其存储在会话中。

+0

我现在可能不会担心GET,因为http无法改变状态(但显然可能)。只要我们保持这个惯例/标准,我们应该没问题。我可能会考虑使用SessionID以外的值来提供额外的安全性,谢谢。 – ironsam 2009-02-06 18:46:31

6

理想情况下,你会想使用会话id以外的东西,但基本上就是这样。 OWASP建议使用存储在用户会话中的随机表单元素名称。这样攻击者甚至不能伪造正确的隐藏域。

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

+0

随机化表单元素名称是一个有趣的想法。感谢您的链接。 – ironsam 2009-02-06 18:42:21