我正在开发一个本地研究工具,需要我关闭Firefox的同源策略(就脚本访问而言,跨域请求并不重要)。
更具体地说,我想让宿主域中的脚本能够访问页面中嵌入的任意iframe中的任意元素,而不论它们的域名。
我知道以前的问答中提到了CORS FF扩展程序,但那不是我需要的,因为它只允许CORS,而不允许脚本访问。
如果不能轻松实现,我也会感激任何能指引我修改FF源代码以禁用SOP的见解,以便我可以重新编译FF。
我正在开发一个本地研究工具,需要我关闭Firefox的同源策略(就脚本访问而言,跨域请求并不重要)。
更具体地说,我想让宿主域中的脚本能够访问页面中嵌入的任意iframe中的任意元素,而不论它们的域名。
我知道以前的问答中提到了CORS FF扩展程序,但那不是我需要的,因为它只允许CORS,而不允许脚本访问。
如果不能轻松实现,我也会感激任何能指引我修改FF源代码以禁用SOP的见解,以便我可以重新编译FF。
有一个Firefox扩展可以将CORS头添加到任何HTTP响应中,适用于最新的Firefox(build 36.0.1),发布于2015年3月5日。
我已经测试过了,在Windows 7和Mavericks上都可以工作。我会指导您完成使其工作的步骤。
1)获取扩展程序
您可以从此处(作者构建)或此处(镜像,可能不会更新)下载xpi文件。
或者从GitHub下载文件。 现在它也可以在Firefox Marketplace上下载:在这里下载。在这种情况下,单击安装后,插件将被安装,并且您可以跳过第4步。
如果您下载了xpi,则可以跳转到第3步。如果您从GitHub下载了zip,则请执行第2步。
2)构建xpi
您需要解压缩zip,进入“cors-everywhere-firefox-addon-master”文件夹,选择所有项目并将它们压缩成zip。 然后,将创建的zip重命名为 * .xpi
注意:如果您使用OS X gui,则可能会创建一些隐藏文件,因此最好使用命令行。
3)安装xpi
您可以将xpi拖放到Firefox中,或者转到:“about:addons”,单击右上角的齿轮图标,然后选择“从文件安装附加组件”,再选择您的 .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
设置为false和security.mixed_content.block_display_content
设置为true来禁用HTTP/HTTPS混合内容保护。请记住,这会禁用一些安全功能,因此应该是一个临时解决方案。 - bufhabout: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,该函数在日期03/02/2016时是第568行。
使该函数始终返回NS_OK。
这将永久禁用SOP。
@Giacomo提供的浏览器插件答案对大多数人应该很有用,我已经接受了那个答案,但是对于我的个人研究需求(TL;在此不解释),它还不够,我认为其他研究人员可能需要像我一样做这件事情来完全禁用SOP。
注意:2021年12月更新,自 Firefox 95 开始,“CORS request not HTTP” 错误无法通过调整“privacy.file_unique_origin”来禁用。请参见上面的“CORS request not HTTP”链接,它已经由官方最近进行了更新。对我来说唯一的方法是“…需要执行本地测试的开发人员现在应该设置一个本地服务器。”
对我来说,将content.cors.disable设置为false即可生效。
about:config
中添加 content.cors.disable
(空字符串)。true
时使所有 CORS 请求失败,但没有涉及 false
或其他值。在 Firefox 中,禁用 CORS 的首选项是 content.cors.disable。将其设置为 true 将禁用 CORS,因此每当出现这种情况时,CORS 请求都会因此错误而失败。 - stealththeninjacontent.cors.disable
,但它是布尔类型,因此无法删除/编辑。 - a55