.net – 为什么ValidateAntiForgeryTokenAttribute允许匿名令牌?

在ASP.NET MVC中,ValidateAntiForgeryTokenAttribute调用的验证逻辑允许匿名防伪令牌,即没有任何用户特定信息(如IIdentity.Name或ClaimUid)的令牌.

因此,如果未使用声明且登录后未设置HttpContext.User(并非罕见),则系统的恶意用户可以使用恶意用户自己的合法获取的防伪令牌对任何其他用户发起CSRF攻击.

这似乎并不可取.为什么允许使用匿名令牌?

解决方法

MVC中的反CSRF系统允许匿名用户,因为它需要保护登录页面,根据定义,您在登录之前是匿名的.特别是,它试图防御的攻击是 Login CSRF.

由于反CSRF令牌分为HTTP cookie和隐藏的< input>元素,攻击者是否能够启动登录CSRF取决于他所处的位置.当然 – 您可以说服我的浏览器提交< form>包含您的令牌,但我的浏览器会将我的cookie连同请求一起提交给服务器. cookie和表单令牌不仅仅编码字符串“anonymous”:它们还包含将两者链接在一起的随机标识符.在这种情况下,由于您不知道我的cookie中包含的随机标识符,您仍然无法对我进行登录CSRF攻击.

如果攻击者与目标网站共享域名(例如,attacker.shareddomain.com和bank.shareddomain.com),则攻击者可以为* .shareddomain.com设置cookie并用他自己的一个覆盖受害者的cookie选择.这将允许进行CSRF攻击.您需要其他机制(如2FA或HTML5本地存储)来防止共享子域方案中的CSRF攻击.

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...