代码之家  ›  专栏  ›  技术社区  ›  Rob Gray

RequestVerificationToken cookie在响应中不存在

  •  2
  • Rob Gray  · 技术社区  · 16 年前

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

    我的异常日志正在报告HttpAntiforyException的发生,这些异常看起来像是由有效请求触发的(推荐人看起来是正确的)。引发异常的响应在表单字段中还包含_RequestValidationToken,带有标记值。但是,请求中缺少必要的cookie,导致验证失败并引发异常。

    我在想为什么这个饼干不见了,并提出了以下可能的原因:

    1. 本周饼干收集已满 域名。-如果是这样的话 在这里,我希望看到20/50的饼干 在每个请求中(顺便说一句,所有 用户代理是IE7和IE8)和 不知怎的,饼干掉了。 我看到了3到23块饼干 在各种各样的事件中 例外
    2. Cookie的数据限制已被取消 到达。-这不会发生。通过 看着这些日志,我可以看到 饼干收集量很小。
    3. 回复正在被发回 在加入饼干之前- 我不确定这件事。手动 呼叫应答。头晕 结果出现异常,说明 无法修改cookies集合 在报告发出后。
    4. ?

    在绝望中,我求助于SO的人,并询问我可以调查的这个丢失饼干的任何其他可能原因。

    2 回复  |  直到 16 年前
        1
  •  6
  •   Josh    15 年前

    我也有同样的问题。我的内容是通过跨域iframe呈现的。根据 Adam Young ,IE将自动阻止第三方cookie,除非您在标头中定义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
  •  2
  •   Philipp P    12 年前

    根据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);
    }