如何在 Chrome 中强制加载动态、不安全的内容?

Posted

技术标签:

【中文标题】如何在 Chrome 中强制加载动态、不安全的内容?【英文标题】:How to force loading dynamic, insecure content in Chrome? 【发布时间】:2012-12-13 02:03:52 【问题描述】:

我在 https 中使用 Jira,我想用一些额外的 JS 进行一些调整。我的 JS 托管在不安全的服务器上(没有可用的 https)。

当我通过将不安全的 JS 文件插入 DOM(使用浏览器扩展程序)来动态加载它时,Chrome 告诉我:

[阻止]https://jiraserver/browse 的页面运行来自http://myserver/jira.js 的不安全内容。

我可以看到这是非常安全的,但我不在乎。我想加载那个不安全的 JS 文件。我如何让 Chrome 信任我并按我说的做?

我的插入方式(在扩展代码中):

document.body.appendChild((function(s)s.src='http://myserver/jira.js';return s;)(document.createElement('script')));

【问题讨论】:

为什么不能使用“https://myserver/jira.js”? 为什么不将 jira.js 的源代码附加到正文中,而不是尝试让浏览器下载它? @ama2 因为myserver 不提供 https 服务。它没有证书。 @jeremy 我将如何获得源代码?关键是要让源代码“动态”,这样它就可以在 myserver 上更改并在 jiraserver 上自动更改。 我认为这更好地回答了你的问题:superuser.com/questions/487748/… 【参考方案1】:

Chrome 根本不会在安全页面中加载不安全的脚本。

你的 jira.js 要从服务器加载吗?将其注入页面的最佳方法是将其包含在您的扩展包中。

var s = document.createElement('script');
s.src = chrome.extension.getURL("jira.js");
s.onload = function() 
    this.parentNode.removeChild(this);
;
(document.head||document.documentElement).appendChild(s);

如果您必须从服务器加载它,我想您的扩展程序可以对脚本发出 XHR 请求,然后将响应注入页面。

// make a XHR request, then...
var s = document.createElement('script');
s.textContent = codeFromXHR;
(document.head||document.documentElement).appendChild(s);
s.parentNode.removeChild(s);

【讨论】:

XHR 会尊重缓存吗?一次又一次地下载它是……次优的。我不能告诉 Chrome 忽略其愚蠢的安全规则吗?是我的电脑!必须有一个标志 =( 我不认为你应该将东西注入document.documentElement btw... =) 只有头部和身体'允许'w3.org/TR/html401/sgml/dtd.html#html.content 是的,XHR 遵循与“常规”浏览器相同的所有适用缓存规则。您不能简单地绕过安全规则——如果可以的话,它们不会提供太多安全性。【参考方案2】:

根据this Chrome Support Q&A,您可以使用以下命令行标志启动您的 Chrome,以防止 Chrome 检查不安全的内容:

--allow-running-insecure-content

这里是some documentation,关于如何使用命令标志运行 Chrome

【讨论】:

哇哦!格拉齐。我实际上认为我以前看过那个页面......也许我认为添加那个标志太费力了。仍然认为它很愚蠢,它不是可配置的。 Mac 用户:'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' --allow-running-insecure-content > /dev/null 2>&1 & from superuser.com/a/524510/290504 @Rudie 解决了吗?我无法用标志解决这个问题。 @verystrongjoe 我认为做到了,但已经有一段时间了,这些天我有一个 HTTPS 服务器,所以不再需要标志了。也许他们已经删除了它......我现在很好奇。有测试页吗? @verystrongjoe 我没有任何意思。我在问是否有可以在我的机器上试用的测试页。【参考方案3】:

我遇到了同样的问题: 我们的客户端将托管在我们服务器中的 CSS 文件和 js 文件链接到一个不安全的域上。

我们将使用 Amazon CloudFront 解决它。他们使用经过验证的证书来服务 HTTPS。

这不是一个糟糕的使用解决方案,因为 CDN 通常是一个好主意,而且这些资源有些静态。 (CSS 文件是为每个客户端量身定制的,实际上是生成的,但可以配置合理的 TTL 并根据需要刷新 CDN)

请注意,根据您的数据负载,CDN 解决方案甚至可能比实际购买证书更实惠。

【讨论】:

【参考方案4】:

我遇到了同样的问题,发现如果我们在 chrome 中登录到我们的谷歌帐户,那么 Chrome 会停止在 https 中加载不安全的内容。

如果我们使用隐身窗口来加载包含不安全内容的网站,那么它会起作用。

【讨论】:

以上是关于如何在 Chrome 中强制加载动态、不安全的内容?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome浏览器如何强制刷新

Angular 中动态编译的延迟加载动态路由导致“不安全评估”错误

如何获取“Chrome 检测到不安全内容”而不是“Chrome 检测到高风险不安全内容”

如何阻止 chrome 缓存

Unity无法加载脚本?

Chrome 扩展“拒绝加载脚本,因为它违反了以下内容安全策略指令”