【问题标题】:MVC anti-forgery tokenMVC 防伪令牌
【发布时间】: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


【解决方案1】:

确保您在控制器和表单中都有 AntiForgery 属性。

如果您正在做 ajax 发布,也许您可​​以发送 RequestValidationToken 作为参数。

$('input[name=__RequestVerificationToken]').val()

也可能有人攻击您的网站或使用一些机器人来获取内容或发布表单。

【讨论】:

  • AntiForgery 属性在控制器和表单中 - 否则它肯定会一直对每个人都失败吗? requestverificationtoken 正在与 ajax 请求一起发送。
猜你喜欢
  • 2014-10-03
  • 1970-01-01
  • 2014-04-26
  • 2014-01-23
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多