7

目前我正在开发 ASP .NET MVC 4 应用程序。我们正在使用提供[ValidateAntiForgeryToken]的和对应@Html.AntiForgeryToken()的在我们使用 POST 提交的表单中生成隐藏字段。

到目前为止,该机制似乎工作正常,因为如果我没有将令牌作为输入隐藏字段提供给目标,则按[ValidateAntiForgeryToken]预期会引发带有错误注释的动作。

但是我发现真的很奇怪,如果我使用 Firebug 或 Chrome 检查器捕获了几个生成的令牌,将它们复制到记事本中,然后转到另一个也使用 AntiForgeryToken 的页面,并且基本上用之前生成的任何令牌替换隐藏字段,一个错误没有提出。我期望始终具有 1:1 关系(页面隐藏字段 - ValidationAtServer],因为如果有人能够获得该值,将能够伪造对应用程序中需要 AntiForgeryToken 的任何形式的任何请求

我的印象是,一旦生成了令牌,就不可能重复使用相同的令牌,我认为这是框架本身的安全漏洞。

如果有人可以提供更多见解,将不胜感激。

4

2 回答 2

5

AntiForgeryToken 是会话基础,因此每个用户都拥有相同的令牌,但另一个用户将拥有不同的令牌。这个讨论可能对你有用:AntiForgeryToken changes per request

于 2013-08-11T19:00:52.383 回答
1

这是正常行为,因为假设防伪令牌没有受到损害。如果攻击者能够破坏代币,则意味着攻击者已经有机会破坏任何其他代币,这将被生成。例如中间攻击的人。所以基本上没有必要为每个请求生成 Antiforgery 令牌,它将允许您在当前页面上为 Ajax 请求使用已经生成的令牌。

于 2013-10-14T12:44:04.320 回答