【问题标题】:RequestVerificationToken cookie not present in Response响应中不存在 RequestVerificationToken cookie
【发布时间】:2014-04-24 18:44:40
【问题描述】:

我的 ASP.NET MVC 应用程序通过使用 ValidateAntiForgeryToken 属性并调用 Html.AntiForgeryToken 使用令牌值写入隐藏的输入元素并将令牌放入 cookie 中来防止 CSRF 攻击。

我的异常日志报告了 HttpAntiForgeryException 的发生,看起来像是由有效请求触发的(引荐来源网址看起来正确)。导致异常的 Response 在 Form 字段中还包含 __RequestValidationToken 以及令牌值。但是,请求中缺少必要的 cookie,导致验证失败并引发异常。

我正在尝试思考为什么这个 cookie 丢失,并想出了以下可能的原因:

  1. Cookie 集合已满 领域。 - 如果是这样的话 在这里我希望看到 20/50 cookie 在每个请求中(顺便说一句,所有 用户代理是 IE7 和 IE8) 和 不知何故,cookie 被丢弃了。 我看到了 3 到 23 个 cookie 在各种发生的 例外
  2. Cookie 的数据限制已 到达。 - 这不会发生。经过 查看日志我可以看到 cookie 集合很小。
  3. 正在发回响应 在添加 cookie 之前。 - 不确定这个。手动 在头部调用 Reponse.Flush 导致异常说明 无法修改 cookie 集合 发送回复后。
  4. ?

无奈之下,我求助于 SO 的人员,并询问我可以调查此丢失 cookie 的任何其他可能原因。

【问题讨论】:

  • 用户是否有可能在浏览器上禁用了cookies?
  • 每个异常日志条目在每个请求中都有其他cookie。
  • 我看到了完全相同的问题。它只发生在 IE 中,并且存在其他 cookie。当 cookie 存在时,我什至看到了这个错误。它已经困扰我一段时间了,我担心我将不得不移除我的防伪保护。
  • 找到这个问题的根源了吗?

标签: asp.net-mvc csrf antiforgerytoken missing-cookies


【解决方案1】:

我遇到了完全相同的问题。我的内容是通过跨域 iframe 呈现的。根据Adam Young,IE 会自动阻止第三方 cookie,除非你在 header 中定义了 P3P 策略。

我添加了代码以将 p3p 策略注入到标头中,并从我在 iframe 中使用的每个操作中调用它。到目前为止,我们还没有看到这个错误出现。我希望这个解决方案对其他人有所帮助。

public static void SetP3PCompactPolicy()
{
    HttpContext.Current.Response.AddHeader("p3p", 
    "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
}

我还定义了一个machine key,虽然我不确定这是否必要。

【讨论】:

    【解决方案2】:

    根据 Josh 的回答(iFrame 中的跨域问题),我将这段代码放入控制器的 BeginExecute 方法中,以实现每次调用所需的行为。除了基础控制器之外,所有其他控制器都派生自其他控制器,如果您的网站嵌入在 iFrame 中,您可以实现所有操作都将运行。

    protected override IAsyncResult BeginExecute(System.Web.Routing.RequestContext requestContext, AsyncCallback callback, object state)
    {
        requestContext.HttpContext.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
    
        return base.BeginExecute(requestContext, callback, state);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多