如何在https网站上的iframe中允许http内容

geo*_*ips 135 html security https iframe http

我将一些HTML加载到iframe中但是当引用的文件使用http而不是https时,我收到以下错误:

[已阻止] {current_pagename}的页面从{referenced_filename}运行了不安全的内容

有什么方法可以关闭它或以任何方式解决它?

iframe没有src属性,内容使用以下方式设置:

frame.open();
frame.write(html);
frame.close();
Run Code Online (Sandbox Code Playgroud)

Mat*_*ers 129

注意:尽管此解决方案在2014年编写时可能在某些浏览器中有效,但它不再有效.iframe现代浏览器不允许导航或重定向到嵌入在HTTPS页面中的HTTP URL ,即使框架是以HTTPS URL开头的.

我创建的最佳解决方案是简单地使用google作为ssl代理...

https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
Run Code Online (Sandbox Code Playgroud)

测试并在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页面上创建自己的重定向脚本"方法不再适用于当前版本的Chrom(e | ium)和Firefox,甚至使用JS. (46认同)
  • 答案应该有一个标记为"已弃用"的选项.除非您阅读所有评论,否则会造成混淆. (18认同)
  • 此答案迄今无效,任何其他解决方案 (17认同)
  • 很好的回答,谢谢.只是为了让你知道在chrome中JS重定向方法不起作用只是防止更改(就像你尝试正常加载它时一样). (10认同)
  • 重定向技巧似乎只适用于Firefox.Chrome仍然拒绝加载不安全的内容.还有其他已知的解决方法吗? (9认同)
  • 这不是解决方案,因为它只适用于Firefox (4认同)
  • @vrijdenker,当时,谷歌的代理工作在更多的浏览器中.就像我说的那样,随着时间的推移,解决方案将变得过时,因为这些仅仅是黑客攻击.问题本身是有缺陷的,因为它假定除了'不,它不能通过设计完成'之外存在永久解决方案. (2认同)
  • 使用Google作为SSL代理对我来说也不起作用 (2认同)

Dav*_* R. 28

我知道这是一个旧帖子,但另一个解决方案是使用cURL,例如:

redirect.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;
}
Run Code Online (Sandbox Code Playgroud)

然后在你的iframe标签中,例如:

<iframe src="/redirect.php?url=http://www.example.com/"></iframe>
Run Code Online (Sandbox Code Playgroud)

这只是一个MINIMAL示例来说明这个想法 - 它不会清理URL,也不会阻止其他人使用redirect.php来达到自己的目的.在您自己的网站上下文中考虑这些事情.

不过,好处是它更灵活.例如,您可以添加curl'd $ data的一些验证,以确保它在显示之前确实是您想要的 - 例如,测试以确保它不是404,并且如果它有自己准备好的备用内容是.

另外 - 我有点厌倦依赖Javascript重定向来处理任何重要的事情.

干杯!

  • 这非常有用,但网站内的链接无效.例如,我有一个名为`example.com`的域,它有一个SSL.我正在使用没有SSL的`example.net`嵌入iframe.`example.com`有一个类似`href ="/ path/file.html"的链接,点击它时,它打开为`https:// example.com/path/file.html`而不是`http :// example.net /路径/ file.html` (4认同)

小智 27

基于这个问题的一般性,我认为,您需要在某些服务器上在线设置自己的HTTPS代理.执行以下步骤:

  • 准备代理服务器 - 安装IIS,Apache
  • 获取有效的SSL证书以避免安全性错误(例如,从startssl.com免费)
  • 写一个包装器,它将下载不安全的内容(如何在下面)
  • 从您的网站/应用获取https://yourproxy.com/?page=http://insecurepage.com

如果您只是通过file_get_contents或类似方式下载远程站点内容,您仍然可以拥有不安全的内容链接.您必须使用正则表达式找到它们并替换它们.图像很难解决,但我找到了解决方法:http://foundationphp.com/tutorials/image_proxy.php


use*_*022 14

添加<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

  • 此解决方案不允许您在https站点上提供http内容.所有这一切都是强制http请求为https请求.如果https上不存在该资源,则只会收到404错误. (20认同)

Add*_*dde 7

尝试在https页面上显示非安全内容时,您将始终收到大多数浏览器中被阻止内容的警告.如果你想嵌入来自不在ssl后面的其他网站的东西,这很棘手.您可以在自己的浏览器中关闭警告或删除阻止,但对于其他访问者来说这是一个问题.

一种方法是加载内容服务器端并将图像和其他内容保存到服务器并从https显示它们.

您还可以尝试使用embed.ly等服务并通过它们获取内容.他们支持将内容置于https之后.


Dav*_*uan 5

目前无法使用Google作为SSL代理,

为什么?

如果您从Google打开了任何页面,就会x-frame-options在标题中找到一个字段。 Google回应标题

X框,选择HTTP响应头可用于指示浏览器是否应该被允许在渲染页面<frame><iframe><object>。网站可以通过确保其内容未嵌入其他网站来避免点击劫持攻击。

(MDN的报价)

解决方案之一

以下是我针对此问题的解决方法:

将内容上传到AWS S3,它将为资源创建一个https链接。
注意:将html文件的权限设置为允许所有人查看。

之后,我们可以将其用作srchttps网站中的iframe。 AWS