MVC CSRF AntiForgeryToken似乎永远不会过期。有没有办法在每次会话后使令牌无效?

时间:2016-07-12 15:01:34

标签: asp.net-mvc asp.net-mvc-4 csrf

我有一个MVC 4.0站点,它使用AntiForgeryTokens来防止CSRF攻击。

我发现在新会话打开后我可以重复使用旧的__RequestVerificationToken。

我首先添加.cshtml

@Html.AntiForgeryToken()

然后我用

装饰控制器中的Post Action方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DoSomething(MyViewModel model)
{
}

然后我执行以下操作: -

  1. 登录管理站点并抓取__RequestVerificationToken值。
  2. 退出
  3. 再次登录(理论上现在应该创建一个新令牌)
  4. 然后在同一浏览器的新标签中提交以下表单(请参阅我之前使用过请求中的令牌)。

    <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>
    
  5. 我发现即使我已经退出并重新登录,我仍然可以使用旧的__RequestVerificationToken,我可以成功发布表单。

    阅读完文档(http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages)后,没有提到令牌失效。

    我的问题是: -

    1. 现在不应该无效吗?
    2. 如果没有,为什么不呢?
    3. 退出并重新登录后,有没有办法让__RequestVerificationToken无效?

0 个答案:

没有答案