禁用Firefox相同来源策略


110

我正在开发一个本地研究工具,该工具需要关闭Firefox的相同来源策略(就脚本访问而言,我并不真正在乎跨域请求)。

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

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

如果不能轻松完成,那么我也将不胜感激,这些见解将我指向FF src代码的特定部分,我可以对其进行修改以禁用SOP,以便重新编译FF。


4
对于开发人员来说,这将是一件有趣的事情。由于相同的源策略是为用户而不是开发人员的安全而设计的,因此应该允许来自给定站点的脚本跨越限制。但是开发人员也是人,因此您也可以释放您的个人信息。
Danubian Sailor

1
我认为目前不可能,这是Firefox Bugzilla中的相关错误报告:bugzilla.mozilla.org/show_bug.cgi?
id=1039678

唯一好的解决方案是按域插入基于插件的标头:stackoverflow.com/a/44093160/956397其他一切都不安全...
PiTheNumber

Answers:


81

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)开始工作

现在,该扩展默认情况下将无法使用。您需要将扩展​​程序图标拖到扩展栏,但是不用担心。有图片!

  • 点击Firefox菜单
  • 点击自定义

1

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

2

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

可能有解决的办法,但它超出了问题的范围。


1
您可以禁用HTTP / HTTPS通过设置混合内容保护security.mixed_content.block_active_content,以虚假security.mixed_content.block_display_content真实的。请记住,您正在禁用某些安全性,这应该是一个临时解决方案。
bufh 2015年

4
作为该插件的作者,我实际上并不确信它将解决这个特定的问题。值得一提。
spenibus

2
@spenibus -你应该让你的插件上签字-我不能安装它:( - support.mozilla.org/en-US/kb/...
彼得Ajtai

3
@PeterAjtai Mozilla一直在努力惹恼我。等待审核:addons.mozilla.org/en-US/firefox/addon/cors-everywhere希望可以自动签名。
spenibus

1
在about:config中将xpinstall.signatures.required设置为false以安装插件。它为我工作。
user2345998 '16

42
about:config -> security.fileuri.strict_origin_policy -> false

21
感谢@Niklas,但是,我认为这只会禁用fileuri相同的源策略检查-可能用于本地Web开发人员测试。它仍然停止我,当我试图访问DOM节点从一个JavaScript与域B的iframe域A
雨辰周

127
这什么也没做
vknyvz

2
确认它确实可以在我的firefox(开发人员)版本中使用:40。感谢@Niklas的提示。
bufh 2015年

11
这是一个专门用于调试的设置,它控制本地文件对其他本地文件的访问(设置为true时,本地文件只能访问同一文件夹或子文件夹中的本地文件,设置为false时,本地文件可以访问所有本地文件) 。来源
乔恩·埃格顿

4
确实可以做一些事情,就我而言,它允许我从file://协议提供的文档中访问本地资源。计算机科学家应该对“任何”一词给予更多的重视-除非您已经测试了所有内容(还没有测试过所有内容),否则请尝试使自己的言论更加保守。使用“无用”一词也是如此。
AMN

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。


499线从今天开始,Git的镜子:github.com/mozilla/gecko-dev/blob/...
kamranicus


3

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

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

在此处输入图片说明


1
摘自Wiki.mozilla.org/Add-ons/Extension_Signing:Firefox 48:Firefox for Desktop的发行版和Beta版将不允许安装未经签名的扩展,并且不进行覆盖。我找不到此插件的签名版本。
FelixM

1
@FelixM这是做的方法:ghacks.net/2016/08/14/…–
卡多·

@FelixM Firefox开发人员版在“ about:config”标志中具有布尔值“ xpinstall.signatures.required”选项。但是,此扩展的版本0.1.1与Firefox Developer Edition 58.0(Quantum)不兼容。
alxndr

2

CORS-比比皆是插件对我的作品,直到Firefox的68后,68我需要调整“privacy.file_unique_origin” - >假(通过开放式“about:config中”),以解决“ CORS请求不是HTTP ”新CORS同源规则介绍。


1

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


1
已经测试过了吗?从我正在阅读的内容来看,该首选项旨在使所有CORS请求在设置为时都会失败true,但是对false或其他值一无所知。“在Firefox中,禁用CORS的首选项是content.cors.disable。将其设置为true会禁用CORS,因此,在这种情况下,CORS请求始终会因此错误而失败。” developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/...
stealththeninja

从Firefox 68.7开始,此设置甚至不可用。
Gunnar Bernstein
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.