Asp.net CSRF验证令牌:会话id安全吗?

Asp.net CSRF验证令牌:会话id安全吗?,asp.net,security,csrf,Asp.net,Security,Csrf,在asp.net中,我正在实现一个IHttpModule以减轻CSRF攻击。它向响应html中注入一个隐藏的表单参数,其中包含GETs上的asp.net SessionID。然后在POST上检查以确保隐藏参数的值与当前会话ID匹配。据我所知,获取SessionID值的唯一方法是从cookie获取,恶意站点无法读取或确定该cookie。有什么我忽略的吗?理想情况下,您可能希望使用会话id以外的其他内容,但基本上就是这样。OWASP建议使用存储在用户会话中的随机表单元素名。这样,攻击者甚至无法伪造正

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

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


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

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


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

将表单元素名称随机化是一个有趣的想法。谢谢你的链接。我现在可能不会担心GET,因为http更改GET的状态是无效的(但显然是可能的)。只要我们保持这一惯例/标准,我们就应该很好。我可能会考虑使用SessionID以外的值来实现您提到的额外安全性-谢谢。