Asp.Net Anti-Forgery

时间:2012-06-28 09:34:14

标签: asp.net-mvc asp.net-mvc-3 csrf antiforgerytoken

我有一个问题,我最近在我的所有表单中放置了防伪标记,在我的控制器中我放了ValidateAntiForgeryToken属性。

但是我的用户经常填写表单,然后使用浏览器按钮返回,对其中一个错误进行更正,并获得无效的防伪令牌。

我可以理解为什么会发生这种情况(我们会回来并使用一个无效的防伪令牌),但是有什么办法可以避免这种行为吗?就像强行重新加载这个页面一样?

2 个答案:

答案 0 :(得分:4)

这很奇怪。防伪代币不是一次性使用代币。通常可以在同一会话中愉快地重用它们。您的用户当时是否已登录?该令牌基于登录,因此如果他们在此期间重新登录,则令牌可能不再有效。

答案 1 :(得分:0)

使用TempData方法的“post-after-post模式”应解决您的问题。

基本思路是你会在你的Action中TempData放一些值,并检查该值是否存在。如果用户按下了“后退按钮”或刷新了页面,则TempData值将不再存在 - 您可以检查此值并做出适当的反应(例如,如果您愿意,则重新提交操作)。

我可以详细介绍一下,但Darin Dimitrov的this post总结得恰到好处