3

在我所有表单的基本 MVC 项目中,我见证了特定用户会话的所有@Html.AntiForgeryToken()表单的令牌(cookie)值始终相同。这是为什么?我部分理解这一点(否则会有很多问题,例如后退按钮)。但是为什么不使用“salt”使其不同的形式有所不同:

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

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

4

1 回答 1

3

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

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

一个例外是如果存在 XSS 漏洞,恶意用户可以通过某种方式获取此“实时”信息。但是由于存在 XSS 漏洞,无论如何都没有必要使用 CSRF。

因此,只要每个用户会话都有其独特的价值,恶意用户实际上就不可能提前制作适当的表单提交。

于 2012-12-13T23:12:46.250 回答