我使用防伪令牌获得了一个公共MVC 5网站。每天都会以&#34的形式记录大量错误;防伪cookie令牌和表单字段令牌不匹配。",以及#34;形式的较小数字;防伪cookie" __ RequestVerificationToken"不存在。"。
问题是不可重现的,它发生在不同时间的不同页面上的不同人。关闭浏览器可以解决问题 - 有时只需使用“后退”按钮并重新尝试即可解决问题。
由于该网站适用于绝大多数用户,我可以排除控制器中缺少ValidateAntiForgeryToken属性,同样,我可以排除在视图中丢失或复制@ Html.AntiForgeryToken()代码。
该网站在一台服务器上运行,因此我可以在web.config中排除不同的机器密码(无论如何,我尝试使用和不使用此设置运行网站)。
应用程序池设置为每晚重新启动,并且有足够的备用资源 服务器,所以我可以排除应用程序池重新启动和使会话无效(特别是因为这不会记录在事件日志中或其他任何地方)。
我很少遇到这个问题 - 我确实启用了Cookie,所以我可以排除禁用Cookie。我也可以排除javascript被禁用,因为用户只能在没有JS的情况下进入网站 - 并且在此之后的页面上会出现错误。
我已禁用所有缓存,设置nocache,nostore等。这似乎减少了问题的发生,但它仍然存在(我不得不因各种原因重新启用缓存)。
还有哪些其他选择可以考虑?
我对此感到非常沮丧,我正在考虑关闭防伪保护并为全球安全性的削弱做出贡献。
答案 0 :(得分:1)
确保您在控制器和表单中都有AntiForgery属性。
如果你正在做ajax帖子,你可以发送RequestValidationToken作为参数。
$('输入[名称= __ RequestVerificationToken]&#39)。VAL()
也许有人会攻击您的网站或使用一些机器人来获取内容或发布表单。