Asp.net mvc MVC AntiForgeryToken重用以前生成的令牌

Asp.net mvc MVC AntiForgeryToken重用以前生成的令牌,asp.net-mvc,asp.net-mvc-4,xss,cross-site,Asp.net Mvc,Asp.net Mvc 4,Xss,Cross Site,目前我正在开发ASP.NETMVC4应用程序。我们正在使用提供的[ValidateAntiForgeryToken]和相应的@Html.AntiForgeryToken()在表单中生成隐藏字段,这些字段使用POST提交 到目前为止,该机制似乎工作正常,因为如果我没有将令牌作为输入隐藏字段提供给使用[ValidateAntiForgeryToken]注释的目标操作,则会按预期引发错误 然而,我发现非常奇怪,如果我使用Firebug或Chrome inspector捕获了几个生成的令牌,将它们复制到

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

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

然而,我发现非常奇怪,如果我使用Firebug或Chrome inspector捕获了几个生成的令牌,将它们复制到记事本中,然后转到另一个页面,该页面也使用AntiForgeryToken,并基本上用以前生成的任何令牌替换隐藏字段,则不会出现错误。我希望总是有一个1:1的关系(页面隐藏字段-ValidationServer),因为如果有人能够获得该值,将能够伪造对应用程序中需要AntiForgeryToken的任何表单的任何请求

我的印象是,一旦生成了令牌,就不可能在over上重用同一令牌,我认为这是框架本身的一个安全缺陷


如果有人能提供更多信息,我们将不胜感激。

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

这是正常行为,因为假定antiforgery令牌不会受损。如果atacker能够要妥协token,这意味着atacker已经有机会妥协将产生的任何其他token。例如中间人攻击。
因此,基本上不需要为每个请求生成反伪造令牌,它将允许您在当前页面上为Ajax请求使用已生成的令牌。

Andrey我有这种感觉,但我怎么能做到以下几点呢。从HTML中获取一些反伪造令牌,关闭IIS Express,关闭浏览器,然后启动项目我可以重复使用我以前抓到的伪造令牌。