禁用firefox同源策略

Yuc*_*hou 106 security firefox same-origin-policy

我正在开发一个本地研究工具,要求我关闭Firefox的相同原始策略(在脚本访问方面,我并不真正关心跨域请求).

更具体地说,我希望主机域中的脚本能够访问页面中嵌入的任何iframe中的任意元素,而不管其域名是什么.

我知道之前的Q&As提到了CORS FF扩展,但这不是我需要的,因为它只允许CORS,但不允许脚本访问.

如果它不能轻易完成,我也很感激任何见解,指出我可以修改以禁用SOP的FF src代码的特定部分,以便我可以重新编译FF.

Gia*_*ani 80

有一个Firefox扩展,它将CORS标头添加到2015年3月5日发布的最新Firefox(build 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并选择"从文件安装添加",然后选择.xpi文件.现在,重启firefox.

4)让它工作

现在,默认情况下,扩展程序不起作用.您需要将扩展​​程序图标拖到扩展栏,但不要担心.有图片!

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

P1

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

P2

5)测试它是否正常工作

jQuery的

$.get( "http://example.com/", function( data ) {
  console.log (data);
});
Run Code Online (Sandbox Code Playgroud)

JavaScript的

xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
        console.log(xmlhttp.responseText);
    }
}

xmlhttp.open("GET","http://example.com/");
xmlhttp.send();
Run Code Online (Sandbox Code Playgroud)

6)最后的考虑

请注意,不允许https到http.

可能有一种解决方法,但它落后于问题的范围.

  • 作为这个插件的作者,我实际上并不相信它会解决这个特殊的问题.尽管如此,我还是很高兴. (3认同)
  • @PeterAjtai Mozilla继续努力惹恼我,我明白了.等待审核:https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/应该有希望自动签名. (3认同)
  • 您可以通过将 `security.mixed_content.block_active_content` 设置为 **false** 并将 `security.mixed_content.block_display_content` 设置为 **true** 来禁用 HTTP/HTTPS 混合内容保护。请记住,您正在禁用某些安全性,这应该是一个临时解决方案。 (2认同)
  • @spenibus - 你应该让你的添加签名 - 我无法安装它:( - https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox?as=u&utm_source= inproduct (2认同)

Nik*_*las 35

about:config -> security.fileuri.strict_origin_policy -> false
Run Code Online (Sandbox Code Playgroud)

  • 这没有任何作用 (120认同)
  • 但是,感谢@Niklas,我认为这只会禁用fileuri相同的原始策略检查 - 可能用于本地Web开发测试.当我尝试从域A中的JavaScript中使用域B访问iframe中的DOM节点时,它仍然会阻止我. (19认同)
  • 这是一个专门用于调试的设置,并控制本地文件访问其他本地文件(设置为true,本地文件只能访问同一文件夹或子文件夹中的本地文件,设置为false,本地文件可以访问所有本地文件) .[来源](http://kb.mozillazine.org/Security.fileuri.strict_origin_policy) (10认同)
  • 确认它在我的 firefox(开发者)版本中有效:40。谢谢@Niklas 的提示。 (2认同)
  • 它确实做某事,在我的情况下,它允许我从通过`file://`协议提供的文档中访问本地资源。计算机科学家应该对“任何”一词给予更多的重视-除非您已经对“一切”进行了测试(您没有进行过测试),否则请尝试使自己的言论更为保守。使用“无用”一词也是如此。 (2认同)

Yuc*_*hou 10

我意识到我的旧答案被低估了,因为我没有具体说明如何禁用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.


Tan*_*Van 8

我写了一个附加组件来解决这个问题在Firefox(Chrome,Opera版本即将推出).它适用于最新的Firefox版本,具有漂亮的用户界面和支持JS正则表达式:https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors

在此输入图像描述

  • 谢谢。此外,还有类似的 [CORS-Everywhere Extension](https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/)。 (2认同)

ob.*_*ann 5

cors -everywhere插件对我有用,直到 Firefox 68,68 之后我需要调整 'privacy.file_unique_origin' -> false (通过打开 'about:config') 来解决新 CORS 同源规则的' CORS 请求而不是 HTTP '介绍了。

注意:12/2021 更新。从 Firefox 95 开始,无法通过调整“privacy.file_unique_origin”来禁用“CORS 请求而非 HTTP”。请参阅上面的“CORS 请求不是 HTTP”链接,该链接最近已由官方更新。对我来说唯一的方法是“......需要执行本地测试的开发人员现在应该设置本地服务器。”