【问题标题】:Random "The anti-forgery cookie token and form field token do not match" in AzureAzure 中的随机“防伪 cookie 令牌和表单字段令牌不匹配”
【发布时间】:2017-03-08 22:48:37
【问题描述】:

我们在 Azure 中托管的网站的错误日志中显示随机“防伪 cookie 令牌和表单字段令牌不匹配”错误。在意识到我们需要一个静态机器密钥后,我们在 web.config 中添加了validationKey 和decryptionKey 属性,但是仍然会弹出随机错误。

只是为了在这里定义我对“随机”的使用,在每约 200-300 份表单提交中,这种情况会发生一两次。感觉发生的事情太多了,这对信任我们服务的客户来说是一种真正的干扰。

我想到的另一个想法是这是否发生在没有启用 cookie 的机器上。我无法以一种或另一种方式验证,但我不知道 Cookie 是否是 ValidateAntiForgeryToken 工作的必要条件。如果确实需要 cookie,那么我们是否应该向我们的用户弹出一条消息,让他们知道正确使用 cookie 是必需的?

我可以利用帮助想出诊断此问题的方法或其他有关如何处理此问题的想法。

提前谢谢你。

[更新] 我刚从一个用户那里听到我看到这个错误弹出窗口。事实证明,他们加载了页面并离开了一段时间导致错误。这是个好消息,因为这意味着验证只是在做它的工作,并没有发生任何疯狂的事情......我只需要验证该数据点是否指示其他用户。因此,鉴于此,你们都如何处理令牌过期的情况?您是否以某种干净的方式通知用户?

【问题讨论】:

  • 是否有人试图提交恶意表单数据,即令牌是否有效?
  • 真的,谁知道呢。如果没有娱乐步骤,可能有很多原因
  • 这些是合法尝试使用我们服务的真实用户,因此我看不出他们提交恶意表单数据的理由。还有其他形式的恶意数据,例如使用 Html 或脚本标签,但会产生不同类型的错误。
  • 至于复制步骤,这是所有这些中最难的部分,因为我们自己无法复制它。这只是一个奇怪的场景。
  • 也许这会有所帮助:stackoverflow.com/questions/5767768/…

标签: asp.net-mvc azure antiforgerytoken


【解决方案1】:

你有服务器场吗?即您是否有启用自动缩放的应用服务?还是具有多台机器的云服务?

如果是,请检查您的所有机器密钥是否在所有 web.config 文件中定义为相同的值。 machinekey 用于生成 AntiForgery 令牌。

【讨论】:

  • 我假设因为我们在 Azure 中,所以我们自动地处于某种服务器场中。 machineKey 是在已部​​署的单个 web.config 中定义的,因此我看不到存在冲突 web.config 文件的机会。
  • 好的。 asp.net 用于管理 AntiForgery 令牌的默认 cookie 是 __RequestVerificationToken
  • 如果您有 Azure 应用服务,您可以转到 portal.azure.com > 应用服务 > 您的应用 > 应用服务计划 > 横向扩展以检查您的自动缩放策略看看你有多少实例
  • 我查看了实例数。它被配置为“我手动输入的实例计数”。目前设置为 1。
  • 好的,所以您只有一台具有已定义机器密钥的服务器。您是否尝试双击引发错误的页面的提交?
【解决方案2】:

您能记录失败请求的标头吗?您可以在 Application_Error 上的 global.asax 中添加一些代码,例如:

foreach (string header in request.Headers)
{
     // header <== header name
     // request.Headers[header]) <== header value
 }

【讨论】:

  • 首先,再次感谢您对此的帮助。非常感激。至于记录标题,我应该在那里寻找什么?另外,我将根据我刚刚从用户那里收到的反馈发布此问题的更新。
  • 您将能够查看是否存在防伪令牌 cookie 以及其他一些有趣的东西。在一个应该有它的 URL 上没有这个 cookie 的 POST 可能是来自爬虫或黑客的攻击。
  • 如果所有标题都接缝正常,则可能是您的用户的使用。让我们考虑以下用例: 1)您的表单位于缓存页面(客户端缓存)。生成防伪令牌A 2) 用户验证表单 3) 然后点击浏览器的后退按钮 4) 用户重新验证表单(使用旧的Atoken) 5) asp.net等待防伪令牌B 并获取A。所以它抛出一个异常。为避免这种情况,应在表单包含防伪的 URL 上禁用客户端缓存。
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
相关资源
最近更新 更多