126

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

更具体地说,我希望主机域中的脚本能够访问页面中嵌入的任何 iframe 中的任意元素,而不管它们的域如何。

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

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

4

8 回答 8

89

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

1) 获取扩展

您可以从此处(作者构建)或从此处 (镜像,可能未更新)下载 xpi。

或者从 GitHub下载文件。现在它也在 Firefox Marketplace 上:在此处下载。在这种情况下,插件会在您单击安装后安装,您可以跳到第 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)让它工作

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

  • 点击火狐菜单
  • 点击自定义

p1

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

p2

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 到 http 是不允许的。

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

于 2015-03-17T10:04:22.960 回答
55
about:config -> security.fileuri.strict_origin_policy -> false
于 2013-08-28T18:22:15.347 回答
12

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

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

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

转到函数实现 nsScriptSecurityManager::CheckSameOriginURI,它是截至 2016 年 3 月 2 日的第 568 行。

使该函数始终返回 NS_OK。

这将永久禁用 SOP。

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

于 2016-03-02T23:29:37.030 回答
9

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

在此处输入图像描述

于 2017-05-21T04:23:27.620 回答
3

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

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

在此处输入图像描述

于 2016-09-09T21:00:16.943 回答
3

cors -everywhere插件在 Firefox 68 之前为我工作,在 68 之后我需要调整 'privacy.file_unique_origin' -> false (通过打开 'about:config')来解决新 CORS 同源规则的' CORS request not HTTP '介绍了。

注意:12/2021 更新。由于 firefox 95 无法通过调整“privacy.file_unique_origin”来禁用“CORS request not HTTP”。见上面的“CORS request not HTTP”链接,最近官方已经更新了。对我来说唯一的方法是“....需要执行本地测试的开发人员现在应该设置本地服务器。”

于 2019-07-16T10:26:09.457 回答
2

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

于 2021-09-15T12:17:03.813 回答
1

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

于 2020-04-26T13:46:20.957 回答