【问题标题】: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 保护比应有的复杂得多。

标签: http firefox


【解决方案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 的方法?!我错过了什么吗?
猜你喜欢
  • 2020-07-05
  • 1970-01-01
  • 2012-12-05
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
相关资源
最近更新 更多