首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CSRF MVC中的AntiForgeryToken能防止所有的ASP.NET攻击吗?

CSRF MVC中的AntiForgeryToken能防止所有的ASP.NET攻击吗?
EN

Stack Overflow用户
提问于 2009-11-26 17:15:12
回答 1查看 5.5K关注 0票数 18

使用AntiForgeryToken需要每个请求传递一个有效的令牌,因此带有简单脚本的恶意网页将不会向我的web应用程序发送数据。

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

有没有可能,或者我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1802500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档