我将一些 HTML 加载到 iframe 中,但是当引用的文件使用 http 而不是 https 时,我会得到以下错误:
[阻塞]{ current _ pagename }上的页面运行了{ reference _ filename }上不安全的内容
有什么办法能把这个关掉或者绕过去吗?
Iframe 没有 src属性,内容使用以下方式设置:
src
frame.open(); frame.write(html); frame.close();
在大多数浏览器中,当您试图在 https 页面上显示不安全的内容时,总是会收到阻塞内容的警告。如果您想要嵌入不在 ssl 后面的其他站点的内容,那么这个问题就比较棘手。你可以在自己的浏览器中关闭警告或移除阻塞,但对其他访问者来说,这是个问题。
一种方法是加载内容服务器端并将图像和其他内容保存到服务器,然后通过 https 显示它们。
您还可以尝试使用一个服务,比如 embed.ly,并通过它们获取内容。他们支持获取 https 背后的内容。
您可以尝试使用 PHP 或其他服务器端语言来刮取任何需要的内容,然后将 iframe 放到刮取的内容中。下面是 PHP 的一个例子:
Scrapedcontent.php:
<?php $homepage = file_get_contents('http://www.example.com/'); echo $homepage; ?>
.html:
<iframe src="scrapedcontent.php"></iframe>
注意: 虽然这个解决方案在2014年编写的时候可能在某些浏览器中有效,但是现在已经不再有效了。现代浏览器不允许在嵌入 HTTPS 页面的 iframe中导航或重定向到 HTTP URL,即使框架以 HTTPS URL 开始。
iframe
我创建的最佳解决方案是简单地使用谷歌作为 ssl 代理..。
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
在 Firefox 中测试和工作。
其他方法:
使用一个第三方,比如嵌入式.ly (但它只适用于众所周知的 http API)。
在您控制的 https 页面上创建您自己的重定向脚本(在相对链接的页面上使用简单的 javascript 重定向就可以了。比如: (您可以使用任何语言/方法)
这个 iframe 连接到..。
它有一个简单的 js 重定向脚本,如..。
document.location.href ="http://thenonsslsite.com";
或者,您可以添加 RSS 提要或编写一些阅读器/解析器来读取 http 站点并在 https 站点中显示它。
您还可以/应该建议 http 站点所有者创建一个 ssl 连接。如果没有其他原因,除了 会增加搜索引擎优化。
除非你能让 http 站点的所有者创建一个 ssl 证书,否则最安全和永久的解决方案就是创建一个抓取你所需内容的 RSS 提要(假设你实际上并没有在 http 站点上“做”任何事情——也就是说不登录任何系统)。
真正的问题是,在 https 站点中包含 http 元素代表了一个安全问题。对于这种安全风险,没有完全符合犹太教规的方法,所以以上只是目前的解决办法。
注意,您可以在大多数浏览器中禁用此安全措施(您自己,而不是其他浏览器)。还要注意,随着时间的推移,这些“黑客”可能会被淘汰。
基于这个问题的一般性,我认为,您需要在一些联机服务器上设置自己的 HTTPS 代理。执行下列步骤:
如果您只是通过 file _ get _ content 或类似的方式下载远程站点内容,那么您仍然可能有指向内容的不安全链接。您必须使用正则表达式找到它们,并替换它们。图像很难解决,但在这里找到了解决办法: http://foundationphp.com/tutorials/image_proxy.php
使用您自己的 HTTPS 到 HTTP 的反向代理。
如果您的用例只有几个,很少改变 URL 以嵌入到 iframe中,您可以简单地在您自己的服务器上为此设置一个反向代理,并配置它,以便您服务器上的一个 https URL 映射到代理服务器上的一个 http URL。由于反向代理是完全服务器端的,浏览器不能发现它“只”与真实网站的代理进行通信,因此不会抱怨,因为到代理的连接正确地使用了 SSL。
https
http
例如,如果您使用 Apache2作为您的 webserver,那么请参见 这些指示来创建一个反向代理。
我知道这是一篇老文章,但另一个解决方案是使用 cURL,例如:
返回文章页面
<?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’d $data 的验证,以确保在显示它之前它是您真正想要的——例如,测试以确保它不是404,并且如果它是,则拥有您自己的备用内容。
另外,我有点厌倦了依赖 Javascript 重定向做任何重要的事情。
干杯!
在头部加入 <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
参考资料: http://thehackernews.com/2015/04/disable-mixed-content-warning.html 浏览器兼容性: http://caniuse.com/#feat=upgradeinsecurerequests
参考资料: http://thehackernews.com/2015/04/disable-mixed-content-warning.html
浏览器兼容性: http://caniuse.com/#feat=upgradeinsecurerequests
使用 Google 作为 SSL 代理目前无法工作,
如果你打开任何网页从谷歌,你会发现有一个 x-frame-options字段在标题。
x-frame-options
X-Frame-Options HTTP 响应头可用于指示是否允许浏览器在 <frame>、 <iframe>或 <object>中呈现页面。网站可以利用这一点来避免点击劫持攻击,方法是确保 他们的内容不会嵌入到其他网站。
<frame>
<iframe>
<object>
(引自 MDN)
下面是我围绕这个问题所做的工作:
将内容上传到 AWS S3,它将为资源创建一个 https 链接。 注意: 设置 html 文件的权限,允许所有人查看它。
之后,我们可以使用它作为在 https 网站的 iframe 的 src。
你所需要做的就是使用谷歌作为代理服务器。
Https://www.google.ie/gwt/x?u= [ youttpLink ] .
<iframe src="https://www.google.ie/gwt/x?u=[Your http link]"></iframe>
这招对我很管用。
来源:-https://www.wikihow.com/Use-Google-As-a-Proxy
尝试使用 协议相对链路协议相对链路。
你的连结是 http://example.com/script.js,使用:
<script src="//example.com/script.js" type="text/javascript"></script>
通过这种方式,您可以保留该方案的自由(不要在链接中指明协议) ,并相信浏览器使用嵌入式 Web 页面的协议。如果您的用户访问您的 Web 页面的 HTTP 版本,脚本将通过 HTTP://加载,如果您的用户访问您的 Web 站点的 HTTPS 版本,脚本将通过 HTTPS://加载。
见于: https://developer.mozilla.org/es/docs/Seguridad/MixedContent/arreglar_web_con_contenido_mixto