为啥 Firefox 并不总是为 POST 请求发送 HTTP Origin 标头?
Posted
技术标签:
【中文标题】为啥 Firefox 并不总是为 POST 请求发送 HTTP Origin 标头?【英文标题】:Why does Firefox not always send the HTTP Origin header for POST requests?为什么 Firefox 并不总是为 POST 请求发送 HTTP Origin 标头? 【发布时间】:2015-05-16 02:02:45 【问题描述】:我正在https://www.drupal.org/node/1803712探索将 HTTP Origin 检查作为 Drupal 的 CSRF 保护的想法
现在我正在测试 Origin 标头如何通过 POST 请求到达,但 Firefox 不会在用户登录表单提交时发送 Origin 标头。 Chromium 和 Chrome 工作正常,它们发送 Origin 标头。
Firefox 版本是 36.0.1。我还使用干净的 Firefox 安装进行了测试,因为我认为我的一些浏览器插件可能会抑制 Origin 标头,但没有运气 - 那里也没有 Origin 标头。
是否有描述 Firefox 何时发送 Origin 标头以及何时不发送的文档页面?
【问题讨论】:
是的,这是一个很好的问题,我很惊讶没有任何答案,因为它基本上适用于所有 Web API 开发人员。它确实使 CSRF 保护比应有的复杂得多。 【参考方案1】:尚未实施。这里有一个讨论:https://bugzilla.mozilla.org/show_bug.cgi?id=446344
【讨论】:
该问题显示“在 Firefox 59 中已解决”。没有测试。【参考方案2】:Firefox 的默认设置是不发送 HTTP_ORIGIN。
原因是如果启用了network.http.sendOriginHeader
配置变量(可通过about:config
访问),则会导致某些移动Firefox 版本挂起的错误。 (详情见https://developer.mozilla.org/en-US/Firefox/Experimental_features#Security和Marco评论https://bugzilla.mozilla.org/show_bug.cgi?id=446344提供的链接。)
有提议默认开启FF发送HTTP_ORIGIN,但是TODO列表很长(见https://bugzilla.mozilla.org/show_bug.cgi?id=1424076)。 因此,即使没有启用 CSRF 的 javascript 代码,FF 通常也会发送 HTTP_ORIGIN 可能需要数年时间。
某些 FOSS 操作系统会预先配置其 FF 端口以默认发送 HTTP_ORIGIN。 顺便说一句,MS Edge 也不会在没有使用 Javascript 显式启用 CSRF 的情况下发送 HTTP_ORIGIN。
出于这个原因,我对我的网站实施了一项安全设置,使用户能够禁止来自不提供 HTTP_ORIGIN 的浏览器的 POST 事务。
【讨论】:
我不明白,因为 MDN 文档说“[...]我们目前只在 CORS 请求上发送 Origin。” developer.mozilla.org/en-US/docs/Mozilla/Firefox/… 但Origin
似乎没有发送attacker.com
中的form
具有victim.com
的操作和POST
的方法?!我错过了什么吗?以上是关于为啥 Firefox 并不总是为 POST 请求发送 HTTP Origin 标头?的主要内容,如果未能解决你的问题,请参考以下文章