asp.net-mvc – ASP.NET MVC中的AntiForgeryToken是否防止所有CSRF攻击?

使用AntiForgeryToken需要每个请求传递一个有效的令牌,所以使用简单的脚本发布数据到我的Web应用程序的恶意网页将不会成功。

但是如果一个恶意脚本首先会做一些简单的GET请求(由Ajax),以便在隐藏的输入域中下载包含防伪令牌的页面,将其提取并使用它来生成一个有效的POST

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

解决方法

是的,这是你需要做的所有事情。

只要在每个受保护的页面生成一个新的标记,<%= 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

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....