【发布时间】:2015-01-11 04:48:36
【问题描述】:
我有一个使用防伪令牌的公共 MVC 5 网站。每天都有大量错误以“The anti-forgery cookie token and form field token do not match.”的形式记录,而较少数量的错误以“The required anti-forgery cookie "__RequestVerificationToken"的形式记录现在。”。
这个问题是不可重现的,不同的人在不同的时间出现在不同的页面上。关闭浏览器即可解决问题 - 有时只需使用“后退”按钮并重试即可解决问题。
由于该网站适用于绝大多数用户,我可以排除控制器中缺少 ValidateAntiForgeryToken 属性,同样,我可以排除视图中缺少或重复的 @Html.AntiForgeryToken() 代码。
网站在单台服务器上运行,因此我可以在 web.config 中排除不同的机器密钥(无论如何,我都尝试过使用和不使用此设置来运行网站)。
应用程序池设置为每晚重启,并且有大量空闲资源 服务器,所以我可以排除应用程序池重新启动和使会话无效(特别是因为这没有记录在事件日志或其他任何地方)。
我很少遇到这个问题 - 我肯定启用了 cookie,所以我可以排除 cookie 被禁用的可能性。我还可以排除 javascript 被禁用的可能性,因为用户只能在没有 JS 的情况下进入该站点 - 并且在此之后的页面上会出现错误。
我已禁用所有缓存,设置 nocache、nostore 等。这似乎减少了问题的发生,但它仍然存在(由于各种其他原因,我不得不重新启用缓存)。
还有哪些其他选择需要考虑?
对此我感到非常沮丧,我正在考虑关闭防伪保护并助长全球安全性的削弱。
【问题讨论】:
-
您是否有可能在跨域发帖(从 www 到没有 www;或相反)并且 cookie 无法幸免?
-
所有链接都是通过 MVC @ 助手生成的,它们都继承了基本 URL(即,除非 MVC 框架更改域,否则不会)。
-
您已经找到解决方案了吗?只是好奇。
-
不,错误仍在继续。
-
我现在也遇到了同样的问题。一些用户有这个问题,大多数没有。你有没有进一步了解它?
标签: asp.net-mvc cookies antiforgerytoken