我将一些 HTML 加载到 iframe 中,但是当引用的文件使用 http 而不是 https 时,我收到以下错误:
[阻止] {current_pagename} 的页面运行了来自 {referenced_filename} 的不安全内容
有什么办法可以关闭它或解决它吗?
iframe 没有src
属性,内容使用以下方式设置:
frame.open();
frame.write(html);
frame.close();
注意:虽然这个解决方案在 2014 年编写时可能在某些浏览器中有效,但它不再有效。现代浏览器不允许导航或重定向到嵌入在 HTTPS 页面中的 HTTP URL
iframe
,即使框架以 HTTPS URL 开始。
我创建的最佳解决方案是简单地使用 google 作为 ssl 代理...
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
经过测试并在 Firefox 中工作。
其他方法:
使用第三方,例如 embed.ly(但它真的只适用于众所周知的 http API)。
在您控制的 https 页面上创建自己的重定向脚本(在相对链接页面上进行简单的 javascript 重定向应该可以解决问题。例如:(您可以使用任何语言/方法)
https://example.com
那有一个 iframe 链接到...
https://example.com/utilities/redirect.html
其中有一个简单的 js 重定向脚本,例如...
document.location.href ="http://thenonsslsite.com";
或者,您可以添加 RSS 提要或编写一些阅读器/解析器来读取 http 站点并将其显示在您的 https 站点中。
您还可以/应该向 http 站点所有者推荐他们创建 ssl 连接。如果没有其他原因,它会增加 seo。
除非您可以让 http 站点所有者创建一个 ssl 证书,否则最安全和永久的解决方案是创建一个 RSS 提要来获取您需要的内容(假设您实际上并没有在 http 站点上“做”任何事情——也就是说说不登录任何系统)。
真正的问题是在 https 站点中包含 http 元素代表了一个安全问题。没有完全符合这种安全风险的方法,因此以上只是当前的解决方法。
请注意,您可以在大多数浏览器中禁用此安全措施(您自己,而不是其他人)。另请注意,这些“黑客”可能会随着时间的推移而过时。
我认为,基于这个问题的一般性,您需要在某些在线服务器上设置自己的 HTTPS 代理。执行以下步骤:
如果您只是通过 file_get_contents 或类似方式下载远程站点内容,您仍然可以拥有指向内容的不安全链接。您必须使用正则表达式找到它们并替换。图像很难解决,但 Ï 在这里找到了解决方法:http: //foundationphp.com/tutorials/image_proxy.php
我知道这是一篇旧帖子,但另一种解决方案是使用 cURL,例如:
重定向.php:
<?php
if (isset($_GET['url'])) {
$url = $_GET['url'];
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
}
然后在您的 iframe 标记中,类似于:
<iframe src="/redirect.php?url=http://www.example.com/"></iframe>
这只是一个简单的例子来说明这个想法——它不会清理 URL,也不会阻止其他人将 redirect.php 用于他们自己的目的。在您自己的网站背景下考虑这些事情。
不过,好处是它更灵活。例如,您可以添加一些对 curl 的 $data 的验证,以确保它在显示之前确实是您想要的——例如,测试以确保它不是 404,并且如果它准备好您自己的替代内容是。
另外——我有点厌倦了依赖 Javascript 重定向来处理任何重要的事情。
干杯!
加<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
头
参考:http ://thehackernews.com/2015/04/disable-mixed-content-warning.html
尝试在 https 页面上显示非安全内容时,您总是会在大多数浏览器中收到有关被阻止内容的警告。如果你想嵌入来自其他网站的东西,而不是在 ssl 后面,这会很棘手。您可以在自己的浏览器中关闭警告或删除阻止,但对于其他访问者来说这是一个问题。
一种方法是加载内容服务器端并将图像和其他内容保存到您的服务器并从 https 显示它们。
您也可以尝试使用 embed.ly 之类的服务并通过它们获取内容。他们支持获取 https 背后的内容。
您可以尝试使用 PHP 或其他服务器端语言抓取您需要的任何内容,然后将 iframe 放入抓取的内容中。这是一个使用 PHP 的示例:
抓取内容.php:
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
索引.html:
<iframe src="scrapedcontent.php"></iframe>
使用您自己的 HTTPS 到 HTTP 反向代理。
如果您的用例是一些很少更改的 URL 以iframe
嵌入https
到http
. 由于反向代理完全是服务器端,浏览器无法发现它“仅”与真实网站的代理通信,因此不会抱怨,因为与代理的连接正确使用 SSL。
例如,如果您使用 Apache2 作为您的网络服务器,请参阅这些说明来创建反向代理。
您需要做的就是使用 Google 作为代理服务器。
https://www.google.ie/gwt/x?u=[YourHttpLink]。
<iframe src="https://www.google.ie/gwt/x?u=[Your http link]"></frame>
它对我有用。
尝试使用协议相关链接。
您的链接是http://example.com/script.js,使用:
<script src="//example.com/script.js" type="text/javascript"></script>
这样你就可以让方案免费(不要在链接中标明协议),相信浏览器使用的是嵌入网页的协议。如果您的用户访问您网页的 HTTP 版本,脚本将通过 http:// 加载,如果您的用户访问您网站的 HTTPS 版本,脚本将通过 https:// 加载。
见于:https ://developer.mozilla.org/es/docs/Seguridad/MixedContent/arreglar_web_con_contenido_mixto