我正在开发一个本地研究工具,它要求我关闭 Firefox 的同源策略(在脚本访问方面,我并不真正关心跨域请求)。
更具体地说,我希望主机域中的脚本能够访问页面中嵌入的任何 iframe 中的任意元素,而不管它们的域如何。
我知道以前的问答中提到了 CORS FF 扩展,但这不是我需要的,因为它只允许 CORS,但不允许脚本访问。
如果不能轻松完成,我也将不胜感激任何能指出我可以修改以禁用 SOP 的 FF src 代码特定部分的见解,以便我可以重新编译 FF。
我正在开发一个本地研究工具,它要求我关闭 Firefox 的同源策略(在脚本访问方面,我并不真正关心跨域请求)。
更具体地说,我希望主机域中的脚本能够访问页面中嵌入的任何 iframe 中的任意元素,而不管它们的域如何。
我知道以前的问答中提到了 CORS FF 扩展,但这不是我需要的,因为它只允许 CORS,但不允许脚本访问。
如果不能轻松完成,我也将不胜感激任何能指出我可以修改以禁用 SOP 的 FF src 代码特定部分的见解,以便我可以重新编译 FF。
有一个 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)让它工作
现在,默认情况下扩展程序将不起作用。您需要将扩展图标拖到扩展栏中,但不用担心。有图片!
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) 最后的考虑
可能有办法解决它,但它不在问题的范围之内。
about:config -> security.fileuri.strict_origin_policy -> false
我意识到我的旧答案被否决了,因为我没有具体说明如何禁用 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。
我写了一个插件来解决 Firefox 中的这个问题(Chrome,Opera 版本很快就会有)。它适用于最新的 Firefox 版本,具有漂亮的 UI 并支持 JS 正则表达式:https ://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors
截至2016 年 9 月,此插件是禁用CORS的最佳选择:https ://github.com/fredericlb/Force-CORS/releases
在选项面板中,您可以配置要注入的标头和特定网站以自动启用它。
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”链接,最近官方已经更新了。对我来说唯一的方法是“....需要执行本地测试的开发人员现在应该设置本地服务器。”
对我来说,将 content.cors.disable 设置为 false
在about:config
添加content.cors.disable
(空字符串)。