Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC CSRF AntiForgeryToken似乎从未过期。是否有办法在每次会话后使令牌失效?_Asp.net Mvc_Asp.net Mvc 4_Csrf - Fatal编程技术网

Asp.net mvc MVC CSRF AntiForgeryToken似乎从未过期。是否有办法在每次会话后使令牌失效?

Asp.net mvc MVC CSRF AntiForgeryToken似乎从未过期。是否有办法在每次会话后使令牌失效?,asp.net-mvc,asp.net-mvc-4,csrf,Asp.net Mvc,Asp.net Mvc 4,Csrf,我有一个MVC4.0站点,它使用AntiforgeryToken来防止CSRF攻击 我发现,在新会话打开后,我可以重用旧的u RequestVerificationToken 我从添加到.cshtml开始 @Html.AntiForgeryToken() 然后,我在控制器中用 [HttpPost] [ValidateAntiForgeryToken] public ActionResult DoSomething(MyViewModel model) { } 然后,我做以下工作:- 登录到管

我有一个MVC4.0站点,它使用AntiforgeryToken来防止CSRF攻击

我发现,在新会话打开后,我可以重用旧的u RequestVerificationToken

我从添加到.cshtml开始

@Html.AntiForgeryToken()
然后,我在控制器中用

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DoSomething(MyViewModel model)
{
}
然后,我做以下工作:-

  • 登录到管理站点并清除u RequestVerificationToken值
  • 注销
  • 再次登录(理论上现在应该创建一个新的令牌)
  • 然后在同一浏览器的新选项卡中提交下面的表单(请参阅我使用了上一个请求中的令牌)

    
    
  • 我发现,即使我已经注销并再次登录,我仍然可以使用旧的_RequestVerificationToken,并且我可以成功发布表单

    在阅读文档()之后,没有提到令牌的失效

    我的问题是:-

  • 现在不应该是无效的吗
  • 若否,原因为何
  • 是否有办法使_RequestVerificationToken在注销并再次登录后无效

  • 如果是同一个用户登录,为什么会无效?您是否尝试与其他登录用户使用相同的令牌?cf此回答如果由其他用户发布,则表单应失败是(aspnet auth username与字段令牌中存储的用户名进行比较。用户名必须匹配)。进行渗透测试的安全公司已请求令牌在会话结束后过期。他们说要尽量减少代币被重复使用的机会。我可以看到他们的观点,但从我所看到的来看,这并不是这个设置的开箱即用行为。你认为呢?pentest公司的要求毫无意义,很可能是为了证明他们的存在;最好是利用你的时间给他们发送一个链接,让他们知道事情是如何运作的,这样他们就可以看到没有理由担心,或者如果他们觉得有理由担心,他们就可以和微软较量;这是面包和黄油的东西;)有趣的是,stackoverflow对CSRF使用了更复杂的预防方法。它们利用服务器状态(有一个超时)为每个帖子生成一个唯一的随机密钥。我知道这对我的网站来说是过分的。
    <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>