我正在开发一个本地研究工具,该工具需要关闭Firefox的相同来源策略(就脚本访问而言,我并不真正在乎跨域请求)。
更具体地说,我希望宿主域中的脚本能够访问页面中嵌入的任何iframe中的任意元素,而不管它们的域如何。
我知道以前的问答提到了CORS FF扩展,但这不是我所需要的,因为它仅允许CORS,而不能访问脚本。
如果不能轻松完成,那么我也将不胜感激,这些见解将我指向FF src代码的特定部分,我可以对其进行修改以禁用SOP,以便重新编译FF。
我正在开发一个本地研究工具,该工具需要关闭Firefox的相同来源策略(就脚本访问而言,我并不真正在乎跨域请求)。
更具体地说,我希望宿主域中的脚本能够访问页面中嵌入的任何iframe中的任意元素,而不管它们的域如何。
我知道以前的问答提到了CORS FF扩展,但这不是我所需要的,因为它仅允许CORS,而不能访问脚本。
如果不能轻松完成,那么我也将不胜感激,这些见解将我指向FF src代码的特定部分,我可以对其进行修改以禁用SOP,以便重新编译FF。
Answers:
Firefox扩展程序将CORS标头添加到在最新Firefox上运行的任何HTTP响应中( 2015年3月5日发布版本36.0.1)。我对其进行了测试,并且它可以在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”,单击右上角的齿轮,然后选择“ 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)最后考虑
请注意,不允许使用https到http。
可能有解决的办法,但它超出了问题的范围。
security.mixed_content.block_active_content
,以虚假和security.mixed_content.block_display_content
对真实的。请记住,您正在禁用某些安全性,这应该是一个临时解决方案。
about:config -> security.fileuri.strict_origin_policy -> false
file://
协议提供的文档中访问本地资源。计算机科学家应该对“任何”一词给予更多的重视-除非您已经测试了所有内容(还没有测试过所有内容),否则请尝试使自己的言论更加保守。使用“无用”一词也是如此。
我意识到我的旧答案被否决了,因为我没有具体指定如何禁用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-比比皆是插件对我的作品,直到Firefox的68后,68我需要调整“privacy.file_unique_origin” - >假(通过开放式“about:config中”),以解决“ CORS请求不是HTTP ”新CORS同源规则介绍。
在about:config
添加content.cors.disable
(空字符串)。
true
,但是对false
或其他值一无所知。“在Firefox中,禁用CORS的首选项是content.cors.disable。将其设置为true会禁用CORS,因此,在这种情况下,CORS请求始终会因此错误而失败。” developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/...