我正在开发一个本地研究工具,它要求我关闭 Firefox 的同源策略(在脚本访问方面,我并不真正关心跨域请求)。
更具体地说,我希望主机域中的脚本能够访问页面中嵌入的任何 iframe 中的任意元素,而不管它们的域如何。
我知道以前的问答中提到了 CORS FF 扩展,但这不是我需要的,因为它只允许 CORS,但不允许脚本访问。
如果不能轻松完成,我也将不胜感激任何能指出我可以修改以禁用 SOP 的 FF src 代码特定部分的见解,以便我可以重新编译 FF。
有一个 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。
可能有办法解决它,但它不在问题的范围之内。
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
https://i.stack.imgur.com/fU2fa.png
截至 2016 年 9 月,此插件是禁用 CORS 的最佳选择:https://github.com/fredericlb/Force-CORS/releases
在选项面板中,您可以配置要注入的标头和特定网站以自动启用它。
https://i.stack.imgur.com/kLFrb.png
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”链接,最近官方已经更新了。对我来说唯一的方法是“....需要执行本地测试的开发人员现在应该设置本地服务器。”
对我来说,将 content.cors.disable 设置为 false
在 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/…
content.cors.disable
中存在,但它的布尔值,删除/编辑是不可能的
不定期副业成功案例分享
security.mixed_content.block_active_content
设置为 false 并将security.mixed_content.block_display_content
设置为 true 来禁用 HTTP/HTTPS 混合内容保护。请记住,您正在禁用某些安全性,这应该是一个临时解决方案。