Asp.net mvc MVC CSRF AntiForgeryToken似乎从未过期。是否有办法在每次会话后使令牌失效?
我有一个MVC4.0站点,它使用AntiforgeryToken来防止CSRF攻击 我发现,在新会话打开后,我可以重用旧的u RequestVerificationToken 我从添加到.cshtml开始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) { } 然后,我做以下工作:- 登录到管
@Html.AntiForgeryToken()
然后,我在控制器中用
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DoSomething(MyViewModel model)
{
}
然后,我做以下工作:-
如果是同一个用户登录,为什么会无效?您是否尝试与其他登录用户使用相同的令牌?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>