我正在开发一个本地研究工具,要求我关闭Firefox的同源策略(在脚本访问方面,我并不真正关心跨域请求)。
更具体地说,我希望主机域中的脚本能够访问页面中嵌入的任何iframe中的任意元素,无论其域名如何。
我知道之前的Q& As提到了CORS FF扩展,但这不是我需要的,因为它只允许CORS,但不允许脚本访问。
如果不能轻易完成,我也非常感谢任何能够指出我可以修改以禁用SOP的FF src代码的特定部分的见解,以便我可以重新编译FF。
答案 0 :(得分:78)
有一个Firefox扩展,可以将CORS标头添加到任何处理最新Firefox( build 36.0.1 ) 2015年3月5日的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并选择“从文件安装添加”,然后选择你.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)最后的考虑因素
请注意https to http is not allowed。
可能有办法绕过它,但它落后于问题的范围。
答案 1 :(得分:31)
about:config -> security.fileuri.strict_origin_policy -> false
答案 2 :(得分:7)
我意识到我的旧答案被低估了,因为我没有具体说明如何禁用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。
答案 3 :(得分:6)
我写了一个附加组件来解决这个问题在Firefox(Chrome,Opera版本即将推出)。它适用于最新的Firefox版本,具有漂亮的UI并支持JS正则表达式:https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors
答案 4 :(得分:3)
自 2016年9月以来,此插件最好禁用 CORS :https://github.com/fredericlb/Force-CORS/releases
在选项面板中,您可以配置要注入的标头和特定网站以自动启用它。
答案 5 :(得分:0)
cors-everywhere插件对我有效,直到Firefox 68,在68之后,我需要进行调整 'privacy.file_unique_origin'-> false(通过打开'about:config'来解决),以解决引入新的CORS同源规则的'CORS request not HTTP'。
答案 6 :(得分:0)
在about:config
中添加content.cors.disable
(空字符串)。