我有一个MVC 4.0站点,它使用AntiForgeryTokens来防止CSRF攻击。
我发现在新会话打开后我可以重复使用旧的__RequestVerificationToken。
我首先添加.cshtml
@Html.AntiForgeryToken()
然后我用
装饰控制器中的Post Action方法[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DoSomething(MyViewModel model)
{
}
然后我执行以下操作: -
然后在同一浏览器的新标签中提交以下表单(请参阅我之前使用过请求中的令牌)。
<html>
<body>
<form action="http://adminsite.com/DoAction" method="POST">
<input type="hidden" name="id" value="26" />
<input name="__RequestVerificationToken" type="hidden" value="rt95zr0voZbgLga117YNBfwwLpTU8onGCDmZ4IQEisvhiNH_9ISTtsbDzIVgIkRUzwH81PpbrTRGK4MLSp3S3j-JMNjsJTL04TRl2J38rNz8KKomL98gLjEiJoXgMXFt0qaJ8tPaB4_PvGo8ATaxLcA2" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
我发现即使我已经退出并重新登录,我仍然可以使用旧的__RequestVerificationToken,我可以成功发布表单。
阅读完文档(http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages)后,没有提到令牌失效。
我的问题是: -