当前位置: 首页 > 面试题库 >

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

戚学文
2023-03-14
问题内容

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

但是,如果恶意脚本首先发出一个简单的GET请求(由Ajax发出),以便在隐藏的输入字段中下载包含防伪令牌的页面,然后将其提取出来并用于进行有效的POST,该怎么办?

是否有可能,或者我缺少什么?


问题答案:

是的,这就是您需要做的。

只要您在每个受保护的页面上生成一个新令牌,<%= Html.AntiForgeryToken() %>
并始终使用[ValidateAntiForgeryToken]

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

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

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

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

在OWASP上了解有关CSRF的更多信息,
另请参见:XSS预防备忘单



 类似资料:
  • 本文向大家介绍切记ajax中要带上AntiForgeryToken防止CSRF攻击,包括了切记ajax中要带上AntiForgeryToken防止CSRF攻击的使用技巧和注意事项,需要的朋友参考一下 经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击 在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可。 Html.A

  • 我读过关于CSRF和不可预测的同步令牌模式是如何用来防止它的。我不太明白它是如何工作的。 让我们以这个场景为例: 用户使用以下表单登录到站点: 服务器还将令牌存储在会话中。发送请求时,它将表单数据中的令牌与会话中的令牌进行比较。 当黑客可以编写JavaScript代码时,如何防止CSRF: 发送GET请求到站点 接收包含请求表单的html文本。 在html文本中搜索CSRF令牌。 使用该令牌发出恶

  • 什么是CSRF CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 那么CSRF到底能够干嘛呢?你可以这样简单的理解:攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求。攻击者只要借助少许的社会工程学的诡计,例如通过QQ等聊天软件发送的链接(有些还伪装成

  • 我们正在用运行在JBoss中的Java Spring/Hibernate后端构建一个应用程序。前端是AngularJS。 我们还没有在服务器端设置XSRF令牌。我们也没有(无论如何还没有)允许其他域访问我们的web资源的要求。 我想我会试着看看我们的站点是否容易受到XSRF攻击,所以我设置了一个恶意的webapp,使用Angular的$http.post()发布到我们真正应用程序的URL中。我登录

  • 本文向大家介绍csrf 攻击是怎样攻击的? 如何防御相关面试题,主要包含被问及csrf 攻击是怎样攻击的? 如何防御时的应答技巧和注意事项,需要的朋友参考一下 get, post, delete, 分开, 避免使用get修改数据 避免让第三方站点访问cookie 对referrer进行验证 token 阻止第三方请求 .

  • 首先,我假设一个后端来控制输入以防止XSS漏洞。 在这个回答中@Les Hazlewood解释了如何在客户端保护JWT。 假设所有通信都使用100%TLS,无论是在登录期间还是登录后的所有时间,通过基本身份验证使用用户名/密码进行身份验证并接收JWT作为交换是一个有效的用例。这几乎就是OAuth 2的一个流(“密码授权”)的工作原理。[...] 您只需设置授权头: 但是,也就是说,如果您的REST