当前位置:  开发笔记 > 前端 > 正文

ASP.NET MVC中的AntiForgeryToken是否可以防止所有CSRF攻击?

如何解决《ASP.NETMVC中的AntiForgeryToken是否可以防止所有CSRF攻击?》经验,为你挑选了1个好方法。

使用AntiForgeryToken要求每个请求都传递有效令牌,因此使用简单脚本向我的Web应用程序发布数据的恶意网页将无法成功.

但是,如果恶意脚本首先发出一些简单的GET请求(通过Ajax),以便在隐藏的输入字段中下载包含防伪令牌的页面,将其解压缩并使用它来制作有效的POST,该怎么办?

有可能,还是我错过了什么?



1> Cheekysoft..:

是的,这就是你需要做的.

只要您在每个受保护的页面上生成新令牌,并使用,<%= Html.AntiForgeryToken() %> 并始终确保在任何受保护的操作中检查它[ValidateAntiForgeryToken]

这实现了在OWASP 的CSRF预防备忘单中讨论的同步器令牌模式.

为了使脚本能够成功地发出可接受的请求,它必须首先获取表单并读取令牌然后发布令牌.同源策略将阻止在浏览器中允许此操作.站点canot向另一个站点发出AJAX样式的http请求; 只对自己.如果出于某种原因可以违反相同的原产地政策,那么您将变得脆弱.

请注意,如果您有跨站点脚本漏洞,则攻击者可以滥用xss漏洞来规避同一源策略提供的保护(因为脚本现在从您自己的站点运行,因此SOP成功).然后,注入的脚本可以愉快地读取并重新提交令牌.这种通过XSS获得CSRF保护的技术最近在一些蠕虫中很常见.基本上,如果您有XSS,那么您的CSRF保护是浪费时间,因此请确保您不会受到任何影响.

另外需要注意的是Flash和Silverlight.这两种技术都不订阅相同的源策略,而是使用跨域策略文件来限制对远程资源的访问.如果您在自己的站点上发布跨域策略xml文件,则Flash/Silverlight脚本只能访问您站点上的资源.如果您确实发布了此文件,则只允许受信任的第三方服务器的白名单,并且永远不允许*.

在OWASP上阅读有关CSRF的更多信息, 请参阅:XSS预防备忘单

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有