修正混合内容

约-埃尔·范伯根
Jo-el van Bergen

让网站支持 HTTPS 是保护您的网站和用户免受攻击的重要一步,但混合内容会使这种保护毫无用处。浏览器会屏蔽越来越不安全的混合内容,如什么是混合内容?中所述。

在本指南中,我们将介绍解决现有混合内容问题和防止出现新问题的技术和工具。

通过访问您的网站查找混合内容

当您在 Google Chrome 中访问某个 HTTPS 网页时,浏览器会在 JavaScript 控制台中以错误和警告的形式提醒您存在混合内容。

什么是混合内容?中,您可以找到一些示例,并了解 Chrome 开发者工具如何报告问题。

被动混合内容示例将显示以下警告。如果浏览器能够在 https 网址上找到该内容,则会自动升级该内容,然后显示一条消息。

显示在检测到混合内容并升级时显示警告的 Chrome 开发者工具

主动混合内容会被屏蔽,并显示警告。

显示阻止主动混合内容时显示的警告的 Chrome 开发者工具

如果您在网站上发现与 http:// 网址类似的警告,则需要在网站的源代码中修正相应警告。建议您列出这些网址以及您发现它们的网页,以便在修复这些网址时使用。

查找网站中的混合内容

您可以直接在源代码中搜索混合内容。在源代码中搜索 http://,并查找包含 HTTP 网址属性的标记。请注意,在锚标记 (<a>) 的 href 属性中使用 http:// 通常不是混合内容问题,后面会介绍一些值得注意的例外情况。

如果您的网站是使用内容管理系统发布的,则在网页发布时,系统可能会插入指向不安全网址的链接。例如,图片可以包含完整网址,而不是相对路径。 您需要在 CMS 内容中找到并修正这些问题。

修正混合内容

您在网站的源代码中发现混合内容后,可以按照以下步骤进行修正。

如果您收到一条控制台消息,提示您资源请求已自动从 HTTP 升级到 HTTPS,您可以放心地将代码中该资源的 http:// 网址更改为 https://。您还可以检查某个资源是否安全可用,方法是将浏览器网址栏中的 http:// 更改为 https://,然后尝试在浏览器标签页中打开该网址。

如果无法通过 https:// 获取资源,您应该考虑以下选项之一:

  • 从其他主机添加资源(如果有)。
  • 直接下载相关内容并将其托管在您的网站上(如果法律允许您这样做)。
  • 将资源从您的网站完全排除。

解决问题后,请查看您最初发现错误的页面,并验证该错误是否不再出现。

注意非标准标记的使用

请注意您网站上的非标准代码使用方式。 例如,锚点 (<a>) 标记网址不会导致出现混合内容错误,因为会导致浏览器转到新页面。这意味着,它们通常不需要修复。 但是,某些图库脚本会覆盖 <a> 标记的功能,并将 href 属性指定的 HTTP 资源加载到页面上的灯箱显示中,从而导致出现混合内容问题。

大规模处理混合内容

上面的手动步骤适用于较小的网站;但对于大型网站或具有许多独立开发团队的网站,可能很难跟踪加载的所有内容。为帮助完成此任务,您可以使用内容安全政策指示浏览器就混合内容通知您,并确保您的网页永远不会意外加载不安全的资源。

内容安全政策

内容安全政策 (CSP) 是一种多用途浏览器功能,可用于大规模管理混合内容。CSP 报告机制可用于跟踪网站上的混合内容,并提供强制执行政策以通过升级或阻止混合内容来保护用户。

若要为页面启用这些功能,您可以在服务器发送的响应中添加 Content-Security-PolicyContent-Security-Policy-Report-Only 标头。此外,您还可以在网页的 <head> 部分中使用 <meta> 标记设置 Content-Security-Policy(不过不是 Content-Security-Policy-Report-Only)。

使用内容安全政策查找混合内容

您可以使用内容安全政策收集网站上的混合内容报告。若要启用此功能,请设置 Content-Security-Policy-Report-Only 指令,方法是将其添加为您网站的响应标头。

响应标头:

Content-Security-Policy-Report-Only: default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri https://example.com/reportingEndpoint

每当用户访问您网站上的网页时,他们的浏览器都会向 https://example.com/reportingEndpoint 发送有关任何违反内容安全政策的内容的 JSON 格式的报告。在这种情况下,每当通过 HTTP 加载子资源时,系统都会发送报告。这些报告包括违反政策的网页网址,以及违反政策的子资源网址。 如果您将报告端点配置为记录这些报告,则可以跟踪网站上的混合内容,而无需自己访问每个网页。

关于这一点的两点注意事项:

  • 用户必须在理解 CSP 标头的浏览器中访问您的页面。这对于大多数现代浏览器都适用。
  • 您只能获得用户访问过的网页的报告。 因此,如果您的某些网页流量不多,您可能需要过一段时间才能生成整个网站的报告。

内容安全政策指南提供了更多信息和一个示例端点。

使用 CSP 进行报告的替代方案

如果您的网站由 Blogger 等平台为您托管,那么您可能无法修改标头和添加 CSP。不过,可行的替代方案是使用网站抓取工具为您查找网站中的问题,例如 HTTPSChecker混合内容扫描

升级不安全的请求

浏览器支持

  • 44
  • 17
  • 48
  • 10.1

来源

浏览器已经开始升级并屏蔽不安全的请求。您可以使用 CSP 指令强制自动升级或屏蔽这些资源。

upgrade-insecure-requests CSP 指令指示浏览器在发出网络请求之前升级不安全的网址。

例如,如果网页包含带有 HTTP 网址(例如 <img src="http://example.com/image.jpg">)的图片标记

浏览器改为向 https://example.com/image.jpg 发出安全请求,使用户免受混合内容的影响。

您可以通过发送包含以下指令的 Content-Security-Policy 标头来启用此行为:

Content-Security-Policy: upgrade-insecure-requests

或者,使用 <meta> 元素将同一指令内嵌在文档的 <head> 部分中:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

与浏览器自动升级一样,如果资源无法通过 HTTPS 获取,升级后的请求将失败,并且不会加载该资源。这样做可以维护您网页的安全性。upgrade-insecure-requests 指令会比浏览器自动升级更进一步,它会尝试升级浏览器当前不会发出的请求。

upgrade-insecure-requests 指令会级联到 <iframe> 文档中,以确保整个页面受到保护。