我目前正在开发ASP .NET MVC 4应用程序。我们正在使用提供的[ValidateAntiForgeryToken]
和相应的@Html.AntiForgeryToken()
来生成我们的表单中的隐藏字段,这些表单是使用POST提交的。
到目前为止,机制似乎运作良好,因为如果我没有在目标操作中提供令牌作为输入隐藏字段,并带有[ValidateAntiForgeryToken]
,则会像预期的那样引发错误。
然而,我发现非常奇怪的是,如果我使用Firebug或Chrome检查器捕获多个生成的令牌,将它们复制到记事本中,然后转到另一个页面,该页面也使用AntiForgeryToken,并基本上将隐藏字段替换为之前生成的任何令牌,则不会引发错误。我一直期望有一个1:1的关系(页面隐藏字段-服务器验证),因为如果有人能够获得该值,就能够伪造对需要AntiForgeryToken的应用程序中任何表单的任何请求。
我一直认为一旦生成了令牌,就不可能在多个请求中重复使用同一个令牌,我认为这是框架本身的安全漏洞。
如果有人可以提供更多见解,将不胜感激。