iframe 被阻止为不安全的内容,即使 iframe 是 HTTPS

tln*_*g05 3 html https iframe mixed-content

我正在尝试将 iframe(包含shellinabox,如果相关)嵌入到 HTTPS 网页上。我用来嵌入 iframe 的 HTML 非常简单:

<div class="jumbotron" style="min-height: 400px;">

    <iframe src="https://example.com/shellinabox" style="border:none; min-height: 400px;" width="100%"></iframe>
</div>
Run Code Online (Sandbox Code Playgroud)

但是,Chrome 阻止加载 iframe,因为它是“不安全的内容”,我必须手动取消阻止它才能工作。Chrome 控制台报错如下:

Mixed Content: The page at 'https://example.com/mainpage/' was loaded over HTTPS, but requested an insecure resource 'http://example.com/shellinabox/'. This request has been blocked; the content must be served over HTTPS.
Run Code Online (Sandbox Code Playgroud)

我对此感到困惑,因为显然我的 HTML 代码嵌入了example.com/shellinabox. 而且,当我https://example.com/shellinabox直接访问时,锁定图标是绿色的,没有被阻止,并且该页面上没有任何 SSL 问题的迹象。

我还在 Firefox、IE 和 MS edge 中对此进行了测试,它们都具有相同的行为(因此这不是 Chrome 特定的问题)。是什么赋予了?

spe*_*cer 5

这是一个老问题,但我遇到了同样的问题。我的用例与您的略有不同,但希望这会有所帮助。

对我来说,我在 python Flask 服务器上的路由以“/”字符结尾。在我的 iframe 中,我在 src 末尾没有斜线的情况下调用路由,并且看到了同样的错误。向 iframe 中的 src 添加斜杠对我来说很有效。

<iframe src="https://example.com/shellinabox/" style="border:none; min-height: 400px;" width="100%"></iframe>
Run Code Online (Sandbox Code Playgroud)

我不确定为什么 src 属性末尾缺少斜线会导致此错误。如果有人能解释原因,我很乐意更新我的答案。


Dav*_* L. 2

您的代码正在通过 https 加载页面,但该页面可能会尝试通过 http 加载其他脚本或资源。或者页面中可能有通过 http 发出 ajax 请求的脚本。您必须检查该页面并在开发人员控制台中查看以准确了解不安全的请求是什么。这可能不是您如何创建 iframe 元素的问题。