ChatGPT解决这个技术问题 Extra ChatGPT

禁用 Firefox 同源策略

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

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

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

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

对于开发人员来说,这将是一件有趣的事情。由于同源策略是为用户而非开发人员的安全而设计的,因此应该允许来自给定站点的脚本跨越限制。但是开发人员也是人,因此您也可能会丢失您的个人信息。
我相信现在不可能,这里是 Firefox Bugzilla 中的相关错误报告:bugzilla.mozilla.org/show_bug.cgi?id=1039678
唯一好的解决方案是通过基于域的插件注入标头:stackoverflow.com/a/44093160/956397 其他一切都是不安全的......

G
German Lashevich

有一个 Firefox 扩展,可将 CORS 标头添加到在 2015 年 3 月 5 日发布的最新 Firefox(构建 36.0.1)上运行的任何 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 并选择“install add on from file”,然后选择您的 .xpi 文件。现在,重新启动 Firefox。

4)让它工作

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

点击火狐菜单

点击自定义

https://i.stack.imgur.com/VSspG.png

将 CorsE 拖到栏

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

https://i.stack.imgur.com/ead0z.png

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

可能有办法解决它,但它不在问题的范围之内。


您可以通过将 security.mixed_content.block_active_content 设置为 false 并将 security.mixed_content.block_display_content 设置为 true 来禁用 HTTP/HTTPS 混合内容保护。请记住,您正在禁用某些安全性,这应该是一个临时解决方案。
作为这个插件的作者,我实际上并不相信它会解决这个特定的问题。很高兴得到提及。
@speibus - 你应该让你的插件签名 - 我无法安装它:( - support.mozilla.org/en-US/kb/…
@PeterAjtai Mozilla 一直在努力惹恼我。等待审核:addons.mozilla.org/en-US/firefox/addon/cors-everywhere 有望获得自动签名。
在 about:config 中将 xpinstall.signatures.required 设置为 false 以安装插件。它对我有用。
N
Niklas
about:config -> security.fileuri.strict_origin_policy -> false

谢谢@Niklas,但是,我认为这只会禁用 fileuri 同源策略检查 - 可能用于本地 Web 开发测试。当我尝试从域 A 中的 JavaScript 访问具有域 B 的 iframe 中的 DOM 节点时,它仍然阻止了我。
这没有任何作用
确认它在我的 firefox(开发人员)版本中有效:40。感谢您的提示@Niklas。
这是一个专门用于调试的设置,控制一个本地文件访问其他本地文件(设置为true本地文件只能访问同一文件夹或子文件夹中的本地文件,设置为false本地文件可以访问所有本地文件) . Source
确实做了一些事情,就我而言,它允许我从通过 file:// 协议提供的文档访问本地资源。计算机科学家应该更加重视“任何东西”这个词——除非你已经测试了所有东西(你还没有测试过),否则你的言论要更加保守。使用“无用”一词也是如此。
Y
Yuchen Zhou

我意识到我的旧答案被否决了,因为我没有具体说明如何禁用 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/…
T
Tan Mai Van

我写了一个插件来解决 Firefox 中的这个问题(Chrome,Opera 版本很快就会有)。它适用于最新的 Firefox 版本,具有漂亮的 UI 并支持 JS 正则表达式:https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors

https://i.stack.imgur.com/fU2fa.png


谢谢。此外,还有类似的 CORS-Everywhere Extension
它不工作。我尝试启用它,但仍然收到错误消息“跨源请求被阻止:同源策略不允许读取远程资源”。
K
Khado Mikhal

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

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

https://i.stack.imgur.com/kLFrb.png


wiki.mozilla.org/Add-ons/Extension_Signing:Firefox 48:桌面版 Firefox 的发行版和 Beta 版将不允许安装未签名的扩展,没有覆盖。我找不到这个插件的签名版本。
@FelixM 操作方法如下:ghacks.net/2016/08/14/…
@FelixM Firefox 开发者版在“about:config”标志中有一个选项“xpinstall.signatures.required”布尔值。但是,此扩展的 0.1.1 版本与 Firefox Developer Edition 58.0 (Quantum) 不兼容。
o
ob.yann

cors-everywhere 插件在 Firefox 68 之前为我工作,在 68 之后我需要调整 'privacy.file_unique_origin' -> false (通过打开 'about:config')解决 'CORS request not HTTP' 以引入新的 CORS 同源规则。

注意:12/2021 更新。由于 firefox 95 无法通过调整“privacy.file_unique_origin”来禁用“CORS request not HTTP”。见上面的“CORS request not HTTP”链接,最近官方已经更新了。对我来说唯一的方法是“....需要执行本地测试的开发人员现在应该设置本地服务器。”


A
Amar T

对我来说,将 content.cors.disable 设置为 false


d
double-beep

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


这已经测试了吗?根据我的阅读,此首选项旨在使所有 CORS 请求在设置为 true 时失败,但对 false 或其他值只字未提。 “在 Firefox 中,禁用 CORS 的首选项是 content.cors.disable。将此设置为 true 会禁用 CORS,因此无论何时,CORS 请求都会因此错误而失败。” developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/…
从 Firefox 68.7 开始,此设置甚至不可用。
在 FF 84 中找到了这个设置,但它并没有帮助我克服我的问题,即 FF 想要对外国服务器有效的 CORS 策略。
在 FF85 content.cors.disable 中存在,但它的布尔值,删除/编辑是不可能的