我的 ASP.NET MVC 应用程序通过使用 ValidateAntiForgeryToken 属性并调用 Html.AntiForgeryToken 以使用令牌值写入隐藏的输入元素并将令牌放入 cookie 来防止 CSRF 攻击。
我的异常日志报告了 HttpAntiForgeryException 的出现,它们看起来像是由有效请求触发的(引荐来源网址看起来正确)。导致异常的 Response 在 Form 字段中还包含 __RequestValidationToken 以及令牌值。但是,请求中缺少必要的 cookie,导致验证失败并引发异常。
我正在尝试思考为什么缺少此 cookie,并提出了以下可能的原因:
- 该域的 Cookie 集合已满。- 如果是这种情况,我希望在每个请求中看到 20/50 个 cookie(顺便说一句,所有用户代理都是 IE7 和 IE8)并且不知何故 cookie 被丢弃了。我在各种异常情况下看到 3 到 23 个 cookie
- 已达到 cookie 的数据限制。- 这不会发生。通过查看日志,我可以看到 cookie 集合很小。
- 在添加 cookie 之前,将返回响应。- 不确定这个。在头部手动调用 Reponse.Flush 会导致异常,说明在发送响应后无法修改 cookie 集合。
- ?
绝望中,我求助于 SO 的人员,并询问我可以调查此丢失 cookie 的任何其他可能原因。