【发布时间】:2014-04-24 18:44:40
【问题描述】:
我的 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 的任何其他可能原因。
【问题讨论】:
-
用户是否有可能在浏览器上禁用了cookies?
-
每个异常日志条目在每个请求中都有其他cookie。
-
我看到了完全相同的问题。它只发生在 IE 中,并且存在其他 cookie。当 cookie 存在时,我什至看到了这个错误。它已经困扰我一段时间了,我担心我将不得不移除我的防伪保护。
-
找到这个问题的根源了吗?
标签: asp.net-mvc csrf antiforgerytoken missing-cookies