我在正常使用过程中偶尔会遇到这个错误,我还没有找到一种方法来阻止它而不删除需要令牌的属性,我宁愿不这样做。
我在自己的测试中遇到了这个错误(但似乎是随机的),我从我的日志中知道实际登录的用户也得到了它。
有谁知道什么会导致 antiforgerytoken 系统崩溃(除了真正的攻击),以及如何在不打开表单安全漏洞的情况下解决这个问题?
谢谢!
我在正常使用过程中偶尔会遇到这个错误,我还没有找到一种方法来阻止它而不删除需要令牌的属性,我宁愿不这样做。
我在自己的测试中遇到了这个错误(但似乎是随机的),我从我的日志中知道实际登录的用户也得到了它。
有谁知道什么会导致 antiforgerytoken 系统崩溃(除了真正的攻击),以及如何在不打开表单安全漏洞的情况下解决这个问题?
谢谢!
这是我对类似问题的部分回答:
Machine Key and Cookies:这个问题很丑陋,很容易发现(导致异常),但不是很直观。验证 cookie 和令牌使用唯一的“机器密钥”进行编码和解码。这意味着如果您有服务器场,或更改您的服务器,您的 cookie 将不再有效。关闭浏览器可以解决问题(因为 cookie 是会话 cookie)。但是,有些人会让他们的浏览器窗口在后台打开很长时间!
解决方案是在配置文件中设置“机器密钥”。这将告诉 MVC 在所有服务器上使用相同的密钥,确保 cookie 在任何地方都可以解密。
请注意:如果用户保持任何浏览器窗口打开,即使在您更改机器密钥后,他们仍会收到这些错误消息!他们必须关闭窗口(以清除会话 cookie)才能再次访问您的网站。
要确保的一件事是为所有请求使用相同的机器密钥令牌。如果您没有这个并且您的应用程序池回收,则带有旧 cookie 的后续 POST 会导致此错误。
另一个原因是当某人的隐私设置过高并因此阻止 cookie 时。例如,在 Internet Explorer 的隐私选项卡中,如果设置设置为高或阻止所有 Cookie,您将收到此错误。
不确定这是否会有所帮助,但我发现在使用 Internet Explorer 时,只要子域内有下划线“_”,我就会收到此错误......但在 Firefox 上却没有。
仍在寻找解决方案或推理。
阅读此处有关限制的部分
确保您的 ~/Web.config 有一个 <machineKey> 部分,并且您在该部分中设置密钥。反 XSRF 系统需要它存在。
正如mpen在对答案的评论中所说,当用户离开页面超过20分钟(默认会话时间)并且令牌过期时,我一直看到这一点。
您可以通过打开浏览器的开发人员工具并删除 __RequestVerificationToken 隐藏字段来触发或强制此错误(如果您尝试测试捕获它):
<input name="__RequestVerificationToken" type="hidden" value="AqJL/+e9tGCSCXdurrXDRefVL/TAdOAG9Hjrx0oMPg6sVZY3xv099OSYlH1qI8uZyu4x2xFj9eiNVSH2BGsSfJCQAqzxfQtIKoHXNkkW2FJTkxzsNRkwZo1SJUzYGvcEJ/OJ0AouiUWh98qyIzgN2ZkKP7k=">