HSTS 如何处理混合内容?

Sr.*_*der 7 ssl ssl-certificate mixed-content hsts

我刚刚检查了SSL 服务器测试是否在我的服务器上正确实施了 SSL 证书。我得到了一个档次的一个在他们的排名,但你可以得到一个A +,如果你已经激活HSTS。经过一番搜索,我发现 Google 可能会将 HSTS 视为排名因素。因此,它似乎与 SEO 相关。在实施 HSTS 之前,我有一些问题。

问题 1

如果某些外部 javascript 加载例如我网站上的 http(而不是 https)上的图像,会发生什么情况?HSTS 会阻止整个页面加载还是只阻止特定的“不安全”内容?

问题2

目前(没有 HSTS),如果资源是通过 http 加载的,我会收到“混合内容”警告。如果激活 HSTS,“混合内容”是否真的存在?

Esa*_*nen 14

HSTS 根本不尝试处理混合内容:它只是控制浏览器307在尝试加载 HTTP URL 时是否应该执行内部重定向到 HTTPS。混合内容警告是浏览器的一个功能,所有当前的浏览器都这样做(Mozilla Firefox 23+、Google Chrome 21+、Internet Explorer 10+、Edge from the start...)。混合内容警告会阻止例如<script><iframe>,但不会阻止<img>

在加载任何内容之前,即在 HSTS 重定向之前,会检查所有提到的浏览器上的混合内容警告。这看起来很自然,也很容易测试。默认情况下,即使使用纯 HTTP 也会加载所有外部图像,并且仅针对脚本和 iframe 给出混合内容警告。

没有 HSTS 的混合内容

HSTS 仅更改使用纯 HTTP 加载来自启用 HSTS 的域的图像并307 Internal Redirect执行的情况。值得注意的是:这是一种不涉及混合内容警告的情况。

带有 HSTS 的混合内容

因此,HSTS 不能快速解决混合内容问题

  • http://即使是域本身,您也需要修复站点上的 URL。
  • 您需要确保不会从不信任的来源加载外部脚本。
    • 如果第三方不启用 HSTS,它仍然容易受到中间人攻击。
    • 第三方可能会从更多外部来源加载内容,所有这些也适用于这些来源。
    • 外部内容站点可能被破解或自行进行恶意活动。