了解ASP.NET MVC防伪保护

了解ASP.NET MVC防伪保护,asp.net,.net,asp.net-mvc-3,security,Asp.net,.net,Asp.net Mvc 3,Security,在基本MVC项目中,我的所有表单都有@Html.AntiForgeryToken()我见证了令牌(cookie)值对于特定用户会话的所有表单总是相同的。为什么呢?我部分理解(否则会有很多问题,比如后退按钮)。但为什么不使用“盐”使不同的形式有所不同呢 “此方法已弃用。请改用AntiForgeryToken()方法。 要指定要嵌入到令牌中的自定义数据,请使用静态 AntiForgeryConfig.AdditionalDataProvider属性。“ 为什么它这么大(在我的示例中是207字节,用户

在基本MVC项目中,我的所有表单都有
@Html.AntiForgeryToken()
我见证了令牌(cookie)值对于特定用户会话的所有表单总是相同的。为什么呢?我部分理解(否则会有很多问题,比如后退按钮)。但为什么不使用“盐”使不同的形式有所不同呢

“此方法已弃用。请改用AntiForgeryToken()方法。 要指定要嵌入到令牌中的自定义数据,请使用静态 AntiForgeryConfig.AdditionalDataProvider属性。“


为什么它这么大(在我的示例中是207字节,用户标识名是7个字符)?标准会话id要短得多(41)。

它只需要对用户会话唯一的原因在于针对CSRF漏洞的漏洞是如何工作的

本质上,CSRF依赖于恶意用户提前设置的表单值。恶意用户只能设置表单值,通常作为GET参数;他们无法获取/读取合法表单上可能存在的值,也无法可靠地猜测任何用户的207长度代码

例外情况是,如果存在XSS漏洞,恶意用户可能以某种方式获取此“实时”信息。但由于存在XSS漏洞,无论如何,几乎不需要使用CSRF


因此,只要每个用户会话都有自己的唯一值,恶意用户就不可能提前创建适当的表单提交。

反伪造令牌不是隐藏的表单值吗。但生成的令牌同时存储在cookie和隐藏字段中。在post上,它们的值必须相同,验证才能通过。那么为什么仍然存在salt的“AntiForgeryToken()”重载?@UserControl我想只是为了让您能够添加独特的功能,如果您愿意的话。我无法想象一种网络应用会需要它,但我想他们只是想考虑到这种可能性。或者也可能只是为了增加标记的随机性。明白了!猜猜尺寸是多少?为什么不把会话id散列一下呢?我不确定它的大小;也许只是为了让猜测变得和实际一样困难。看起来可以与会话ID大小相比较,但是。。。至于以会话ID为基础,我最好的猜测是这样做会使它(稍微)更可预测。虽然这对我来说还是很脆弱!所以我真的只能猜测:让它更难猜测!