禁用 Firefox 同源策略

Posted

技术标签:

【中文标题】禁用 Firefox 同源策略【英文标题】:Disable firefox same origin policy 【发布时间】:2013-06-09 22:18:34 【问题描述】:

我正在开发一个本地研究工具,它要求我关闭 Firefox 的同源策略(在脚本访问方面,我并不真正关心跨域请求)。

更具体地说,我希望宿主域中的脚本能够访问页面中嵌入的任何 iframe 中的任意元素,无论其域如何。

我知道之前的问答中提到了 CORS FF 扩展,但这不是我需要的,因为它只允许 CORS,但不允许脚本访问。

如果不能轻松完成,我也将不胜感激任何能指出我可以修改以禁用 SOP 的 FF src 代码的特定部分的见解,以便我可以重新编译 FF。

【问题讨论】:

这对开发人员来说是一件有趣的事情。由于同源策略是为用户而非开发人员的安全而设计的,因此应该允许来自 given 站点的脚本跨越限制。但开发人员也是人,因此您也可能会丢失您的个人信息。 我相信现在不可能,这里是 Firefox Bugzilla 中的相关错误报告:bugzilla.mozilla.org/show_bug.cgi?id=1039678 唯一好的解决方案是通过基于域的插件注入标头:***.com/a/44093160/956397 其他一切都不安全... 【参考方案1】:

有一个 Firefox 扩展,可将 CORS 标头添加到在 2015 年 3 月 5 日发布的最新 Firefox(build 36.0.1)上运行的任何 HTTP 响应中。 我对其进行了测试,它可以在 Windows 7 和 Mavericks 上运行。我将指导您完成使其正常工作的步骤。

1) 获取扩展

您可以从 here(作者构建)或从 here 下载 xpi (镜像,可能不会更新)。

或从 GitHub 下载 files。 现在它也在 Firefox Marketplace 上:Download here。在这种情况下,插件会在您单击安装后安装,您可以跳到第 4 步。

如果您下载了 xpi,则可以跳转到第 3 步。如果您从 GitHub 下载了 zip,请转到第 2 步。

2) 构建 xpi

您需要解压缩 zip,进入“cors-everywhere-firefox-addon-master”文件夹,选择所有项目并压缩它们。 然后,将创建的 zip 重命名为 *.xpi

注意:如果您使用的是 OS X gui,它可能会创建一些隐藏文件,因此您最好使用命令行。

3) 安装 xpi

您可以将 xpi 拖放到 firefox,或转到:“about:addons”,单击右上角的 cog 并选择“install add on from file”,然后选择您的 .xpi 文件。现在,重新启动 Firefox。

4) 让它发挥作用

现在,默认情况下扩展程序将无法运行。您需要将扩展​​图标拖到扩展栏中,但不用担心。有图!

点击 Firefox 菜单 点击自定义

将 CorsE 拖到栏 现在,单击图标,当它为绿色时,CORS 标头将添加到任何 HTTP 响应中

5) 测试它是否工作

jQuery

$.get( "http://example.com/", function( data ) 
  console.log (data);
);

javascript

xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange = function() 
    if (xmlhttp.readyState == 4) 
        console.log(xmlhttp.responseText);
    


xmlhttp.open("GET","http://example.com/");
xmlhttp.send();

6) 最终考虑

注意https to http is not allowed。

可能有办法解决它,但它不在问题的范围内。

【讨论】:

您可以通过将 security.mixed_content.block_active_content 设置为 false 并将 security.mixed_content.block_display_content 设置为 true 来禁用 HTTP/HTTPS 混合内容保护。请记住,您正在禁用某些安全性,这应该是一个临时解决方案。 作为这个插件的作者,我实际上并不相信它会解决这个特定的问题。不过很高兴得到提及。 @speibus - 你应该让你的插件签名 - 我无法安装它:( - support.mozilla.org/en-US/kb/… @PeterAjtai Mozilla 一直在努力惹恼我。等待审核:addons.mozilla.org/en-US/firefox/addon/cors-everywhere 应该会自动签名。 在 about:config 中将 xpinstall.signatures.required 设置为 false 以安装插件。它对我有用。【参考方案2】:
about:config -> security.fileuri.strict_origin_policy -> false

【讨论】:

感谢@Niklas,但是,我认为这只会禁用 fileuri 同源策略检查 - 可能用于本地 Web 开发测试。当我尝试从域 A 中的 JavaScript 访问具有域 B 的 iframe 中的 DOM 节点时,它仍然阻止了我。 这没有任何作用 确认它在我的 firefox(开发者)版本中工作:40。谢谢@Niklas 的提示。 这是一个专门用于调试的设置,控制一个本地文件访问其他本地文件(设置为true一个本地文件只能访问同文件夹或子文件夹中的本地文件,设置为false一个本地文件可以访问所有本地文件)。 Source 确实做了一些事情,就我而言,它允许我从通过file:// 协议提供的文档访问本地资源。计算机科学家应该更加重视“任何东西”这个词——除非你已经测试了所有东西(你还没有测试过),否则你的言论要更加保守。使用“无用”一词也是如此。【参考方案3】:

我意识到我的旧答案被否决了,因为我没有具体说明如何禁用 FF 的同源策略。这里我会给出更详细的回答:

警告:这需要重新编译FF,新编译的Firefox版本将无法再次启用 SOP。

查看Mozilla的Firefox的源代码,在src目录下找到nsScriptSecurityManager.cpp。 我将使用此处列出的示例: http://mxr.mozilla.org/aviarybranch/source/caps/src/nsScriptSecurityManager.cpp

转到函数实现 nsScriptSecurityManager::CheckSameOriginURI,截至日期为 03/02/2016 的第 568 行。

使该函数始终返回 NS_OK。

这将永久禁用 SOP。

@Giacomo 的浏览器插件答案应该对大多数人有用,我已经接受了这个答案,但是,对于我个人的研究需要(TL;不会在这里解释)这还不够,我认为其他研究人员可能需要做我在这里所做的以完全杀死 SOP。

【讨论】:

今天第 499 行,Git 镜像:github.com/mozilla/gecko-dev/blob/…【参考方案4】:

我写了一个插件来解决 Firefox 中的这个问题(Chrome,Opera 版本很快就会有)。它适用于最新的 Firefox 版本,具有漂亮的 UI 并支持 JS 正则表达式:https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors

【讨论】:

谢谢。此外,还有CORS-Everywhere Extension 类似。 它不工作。我尝试启用它,但仍然收到错误消息“跨源请求被阻止:同源策略不允许读取远程资源”。【参考方案5】:

截至 2016 年 9 月,此插件是禁用 CORS 的最佳选择:https://github.com/fredericlb/Force-CORS/releases

在选项面板中,您可以配置要注入的标头以及要自动启用的特定网站。

【讨论】:

来自wiki.mozilla.org/Add-ons/Extension_Signing:Firefox 48:桌面版 Firefox 的发行版和 Beta 版将不允许安装未签名的扩展,没有覆盖。我找不到此插件的签名版本。 @FelixM 操作方法如下:ghacks.net/2016/08/14/… @FelixM Firefox 开发者版在“about:config”标志中有一个选项“xpinstall.signatures.required”布尔值。但是,此扩展的 0.1.1 版本与 Firefox Developer Edition 58.0 (Quantum) 不兼容。【参考方案6】:

cors-everywhere 插件在 Firefox 68 之前对我有效,在 68 之后我需要调整 'privacy.file_unique_origin' -> false(通过打开 'about:config')解决 'CORS request not HTTP' 引入新的 CORS 同源规则。

【讨论】:

【参考方案7】:

对我来说,将 content.cors.disable 设置为 false

【讨论】:

【参考方案8】:

about:config 中添加content.cors.disable(空字符串)。

【讨论】:

这个测试过吗?从我读到的内容来看,这个首选项旨在使所有 CORS 请求在设置为true 时失败,但对false 或其他值只字未提。 “在 Firefox 中,禁用 CORS 的首选项是 content.cors.disable。将此设置为 true 会禁用 CORS,因此无论何时,CORS 请求都会因此错误而失败。” developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/… 从 Firefox 68.7 开始,此设置甚至不可用。 在 FF 84 中找到了这个设置,但它并没有帮助我解决 FF 想要对外国服务器有效的 CORS 策略的问题。 在 FF85 content.cors.disable 中存在,但它的布尔值,删除/编辑是不可能的

以上是关于禁用 Firefox 同源策略的主要内容,如果未能解决你的问题,请参考以下文章

Chrome:禁用本地主机的同源策略

无法在 nginx 上禁用同源策略

如何在 Safari(Windows 7)中禁用同源策略?

在 Android Chrome 上禁用同源策略

在 TWebbrowser 中禁用同源策略

禁用同源策略/在 WebKit WebViews 中创建跨域 XMLHttpRequests?