How to allow http content within an iframe on a https site
我将一些HTML加载到iframe中,但是当引用的文件使用http而不是https时,出现以下错误:
[blocked] The page at {current_pagename} ran insecure content from {referenced_filename}
是否有任何方法可以关闭此功能或解决该问题?
iframe没有
1 2 3 | frame.open(); frame.write(html); frame.close(); |
Note: While this solution may have worked in some browsers when it was written in 2014, it no longer works. Navigating or redirecting to an HTTP URL in an
iframe embedded in an HTTPS page is not permitted by modern browsers, even if the frame started out with an HTTPS URL.
我创建的最好的解决方案是简单地将google用作ssl代理...
1 | 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 feed或编写一些阅读器/解析器以读取http站点并将其显示在https站点中。
-
您还可以(也应该)建议http网站所有者创建一个ssl连接。如果没有其他原因会增加seo。
除非您可以让http网站所有者创建ssl证书,否则最安全和永久的解决方案是创建一个RSS feed来获取所需的内容(大概您实际上并没有在http上"做任何事")网站-也就是说不登录任何系统)。
真正的问题是,在https站点内包含http元素表示安全问题。尚没有完全解决这种安全风险的方法,因此上述内容只是当前的解决方法。
请注意,您可以在大多数浏览器(您自己,而不是其他浏览器)中禁用此安全措施。还要注意,这些" hacks"可能随着时间的推移而变得过时。
基于这个问题的普遍性,我认为您需要在线上一些服务器上设置自己的HTTPS代理。请执行以下步骤:
- 准备代理服务器-安装IIS,Apache
- 获取有效的SSL证书以避免安全错误(例如,从startssl.com免费获得)
- 编写包装程序,将下载不安全的内容(操作方法如下)
- 从您的网站/应用中获取https://yourproxy.com/?page=http://insecurepage.com
如果仅通过file_get_contents或类似文件下载远程站点内容,您仍然可以使用不安全的内容链接。您必须使用正则表达式找到它们并替换它们。图像很难解决,但是??在这里找到解决方法:http://foundationphp.com/tutorials/image_proxy.php
我知道这是一篇旧文章,但是另一种解决方案是使用cURL,例如:
redirect.php:
1 2 3 4 5 6 7 8 9 10 11 12 | <?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代码中,如下所示:
1 | <iframe src="/redirect.php?url=http://www.example.com/"></iframe> |
这只是一个说明这个想法的最小示例-它不会清理URL,也不会阻止其他人出于自己的目的使用redirect.php。在您自己的站点的上下文中考虑这些事情。
好处是,它更灵活。例如,您可以添加一些对curl \\'d $ data的验证,以确保它确实是您想要的,然后再显示它-例如,测试以确保它不是404,并使用您自己准备好的内容。
加-我对依靠Java重定向进行重要的操作有点厌倦了。
干杯!
在头部
中添加
reference: http://thehackernews.com/2015/04/disable-mixed-content-warning.html
browser compatibility: http://caniuse.com/#feat=upgradeinsecurerequests
在大多数浏览器中,当尝试在https页面上显示不安全的内容时,您始终会收到警告,提示内容被阻止。如果要嵌入其他不在ssl后面的站点中的内容,这将非常棘手。您可以在自己的浏览器中关闭警告或删除阻止,但是对于其他访问者来说,这是一个问题。
一种方法是加载内容服务器端并将图像和其他内容保存到服务器,然后从https中显示它们。
您也可以尝试使用embed.ly之类的服务,并通过它们获取内容。他们支持将内容隐藏在https之后。
使用Google作为SSL代理当前不起作用,
为什么?
如果您从Google打开了任何页面,则会在标题中找到一个
The X-Frame-Options HTTP response header can be used to indicate whether or not a browser should be allowed to render a page in a
, or . Sites can use this to avoid clickjacking attacks, by ensuring
that their content is not embedded into other sites.
(MDN引用)
解决方案之一
以下是我针对此问题的解决方法:
将内容上传到AWS S3,它将为资源创建一个https链接。
注意:将html文件的权限设置为允许所有人查看。
此后,我们可以将其用作https网站中iframe的
您需要做的只是将Google用作代理服务器。
https://www.google.ie/gwt/x?u= [YourHttpLink]。
1 | <iframe src="https://www.google.ie/gwt/x?u=[Your http link]"></frame> |
对我有用。
信用:-https://www.wikihow.com/Use-Google-As-a-Proxy
您可以尝试使用PHP或其他服务器端语言来刮取所需的任何内容,然后将iframe放入刮取的内容中。这是PHP的示例:
scrapedcontent.php:
1 2 3 4 | <?php $homepage = file_get_contents('http://www.example.com/'); echo $homepage; ?> |
index.html:
1 | <iframe src="scrapedcontent.php"></iframe> |
使用您自己的HTTPS到HTTP反向代理。
如果您的用例大约是几个,很少更改要嵌入到
例如,如果您使用Apache2作为Web服务器,请参阅以下说明以创建反向代理。
尝试使用协议相对链接。
您的链接是http://example.com/script.js,请使用:
1 | <script src="//example.com/script.js" type="text/javascript"> |
通过这种方式,您可以使方案保持空闲状态(不要在链接中指示协议),并可以信任浏览器使用嵌入式Web页面的协议。如果您的用户访问网页的HTTP版本,则脚本将通过http://加载;如果您的用户访问网站的HTTPS版本,则脚本将通过https://加载。
可见于:https://developer.mozilla.org/es/docs/Seguridad/MixedContent/arreglar_web_con_contenido_mixto