抛出间歇性错误,“未提供所需的防伪标记或无效。”

时间:2010-05-06 23:12:53

标签: asp.net-mvc-2 antiforgerytoken

我偶尔会在正常使用期间收到此错误,并且我没有找到一种方法来阻止它而不删除需要令牌的属性,我宁愿不这样做。

我在自己的测试中遇到了这个错误(但看似随机)我从记录中知道实际登录的用户也是如此。

有没有人知道什么会导致防伪系统崩溃(除了真正的攻击),以及如何解决这个问题而不在我的表单中打开安全漏洞?

谢谢!

6 个答案:

答案 0 :(得分:8)

以下是我对a similar question的回答的一部分:

机器密钥和Cookie :这个问题很难看,容易发现(导致异常),但不是很直观。验证cookie和令牌使用唯一的“机器密钥”进行编码和解码。这意味着,如果您有服务器场或更改服务器,则您的cookie将不再有效。关闭浏览器可以解决问题(因为cookie是会话cookie)。但是,有些人长时间在后台打开浏览器窗口! 解决方案是在配置文件中设置“机器密钥”。这将告诉MVC在所有服务器上使用相同的密钥,确保cookie在任何地方都可以解密。

请注意:如果用户打开任何浏览器窗口,即使您更改了机器密钥,他们也会继续收到这些错误消息!他们必须关闭窗口(清除会话cookie)才能再次访问您的网站。

答案 1 :(得分:4)

要确保的一件事是have the same machine key token for all requests。如果您没有这个并且您的应用程序池已经回收,则使用旧cookie的后续POST会导致此错误。

另一个原因是当某人的隐私设置方式很高并因此阻止了cookie。例如,在“隐私”选项卡的Internet Explorer中,如果将设置设置为“高”或“阻止所有Cookie”,则会出现此错误。

答案 2 :(得分:1)

阅读有关限制的部分

prevent cross site request forgery

答案 3 :(得分:1)

不确定这是否有帮助,但我发现在使用Internet Explorer时,只要子域内有下划线'_',我就会收到此错误...但不适用于Firefox。

仍在寻找解决方案或推理。

答案 4 :(得分:0)

确保〜/ Web.config有一个< machineKey>部分,您正在该部分中设置密钥。反XSRF系统要求它存在。

答案 5 :(得分:0)

正如mpen在答案评论中所说的那样,当用户离开页面超过20分钟(默认会话时间)并且令牌过期时,我总是看到这一点。

您可以通过打开浏览器的开发者工具并删除__RequestVerificationToken隐藏字段来触发或强制显示此错误(如果您正尝试测试它):

<input name="__RequestVerificationToken" type="hidden" value="AqJL/+e9tGCSCXdurrXDRefVL/TAdOAG9Hjrx0oMPg6sVZY3xv099OSYlH1qI8uZyu4x2xFj9eiNVSH2BGsSfJCQAqzxfQtIKoHXNkkW2FJTkxzsNRkwZo1SJUzYGvcEJ/OJ0AouiUWh98qyIzgN2ZkKP7k=">