发布于 2009-11-26 21:41:38
是的,这就是你需要做的。
只要您使用<%= Html.AntiForgeryToken() %>
在每个受保护的页面上生成新的令牌,并始终确保使用[ValidateAntiForgeryToken]
在任何受保护的操作中选中该令牌
这实现了在OWASP的CSRF Prevention Cheat Sheet上讨论的同步器令牌模式。
为了让脚本成功发出可接受的请求,它必须首先获取表单并读取令牌,然后再发布令牌。Same Origin Policy将阻止这一点在浏览器中被允许。一个站点不能向另一个站点发出AJAX风格的http请求;只能向它自己发出请求。如果由于某种原因,同源策略可能被破坏,那么您将变得易受攻击。
请注意,如果您有跨站点脚本漏洞,则攻击者可以滥用xss漏洞来绕过同源策略提供的保护(因为脚本现在从您自己的站点运行,所以SOP成功了)。然后,注入的脚本可以愉快地读取并重新提交令牌。这种通过XSS通过CSRF保护的技术最近在一些蠕虫中很常见。基本上,如果你有XSS,你的CSRF保护就是浪费时间,所以要确保你不会受到任何一种攻击。
另一个需要注意的是Flash和Silverlight。这两种技术都不订阅同源策略,而是使用跨域策略文件来限制对远程资源的访问。如果您在自己的站点上发布跨域策略xml文件,则Flash/Silverlight脚本只能访问站点上的资源。如果您确实发布了此文件,请仅允许信任的第三方服务器的白名单,决不允许*。
了解更多关于CSRF at OWASP的信息参见:XSS Prevention Cheat Sheet
https://stackoverflow.com/questions/1802500
复制相似问题