让网站支持 HTTPS 是保护您的网站和用户免受攻击的重要一步,但混合内容会使这种保护毫无用处。浏览器会屏蔽越来越不安全的混合内容,如什么是混合内容?中所述。
在本指南中,我们将介绍解决现有混合内容问题和防止出现新问题的技术和工具。
通过访问您的网站查找混合内容
当您在 Google Chrome 中访问某个 HTTPS 网页时,浏览器会在 JavaScript 控制台中以错误和警告的形式提醒您存在混合内容。
在什么是混合内容?中,您可以找到一些示例,并了解 Chrome 开发者工具如何报告问题。
被动混合内容示例将显示以下警告。如果浏览器能够在 https
网址上找到该内容,则会自动升级该内容,然后显示一条消息。
主动混合内容会被屏蔽,并显示警告。
如果您在网站上发现与 http://
网址类似的警告,则需要在网站的源代码中修正相应警告。建议您列出这些网址以及您发现它们的网页,以便在修复这些网址时使用。
查找网站中的混合内容
您可以直接在源代码中搜索混合内容。在源代码中搜索 http://
,并查找包含 HTTP 网址属性的标记。请注意,在锚标记 (<a>
) 的 href
属性中使用 http://
通常不是混合内容问题,后面会介绍一些值得注意的例外情况。
如果您的网站是使用内容管理系统发布的,则在网页发布时,系统可能会插入指向不安全网址的链接。例如,图片可以包含完整网址,而不是相对路径。 您需要在 CMS 内容中找到并修正这些问题。
修正混合内容
您在网站的源代码中发现混合内容后,可以按照以下步骤进行修正。
如果您收到一条控制台消息,提示您资源请求已自动从 HTTP 升级到 HTTPS,您可以放心地将代码中该资源的 http://
网址更改为 https://
。您还可以检查某个资源是否安全可用,方法是将浏览器网址栏中的 http://
更改为 https://
,然后尝试在浏览器标签页中打开该网址。
如果无法通过 https://
获取资源,您应该考虑以下选项之一:
- 从其他主机添加资源(如果有)。
- 直接下载相关内容并将其托管在您的网站上(如果法律允许您这样做)。
- 将资源从您的网站完全排除。
解决问题后,请查看您最初发现错误的页面,并验证该错误是否不再出现。
注意非标准标记的使用
请注意您网站上的非标准代码使用方式。
例如,锚点 (<a>
) 标记网址不会导致出现混合内容错误,因为会导致浏览器转到新页面。这意味着,它们通常不需要修复。
但是,某些图库脚本会覆盖 <a>
标记的功能,并将 href
属性指定的 HTTP 资源加载到页面上的灯箱显示中,从而导致出现混合内容问题。
大规模处理混合内容
上面的手动步骤适用于较小的网站;但对于大型网站或具有许多独立开发团队的网站,可能很难跟踪加载的所有内容。为帮助完成此任务,您可以使用内容安全政策指示浏览器就混合内容通知您,并确保您的网页永远不会意外加载不安全的资源。
内容安全政策
内容安全政策 (CSP) 是一种多用途浏览器功能,可用于大规模管理混合内容。CSP 报告机制可用于跟踪网站上的混合内容,并提供强制执行政策以通过升级或阻止混合内容来保护用户。
若要为页面启用这些功能,您可以在服务器发送的响应中添加 Content-Security-Policy
或 Content-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 或混合内容扫描。
升级不安全的请求
浏览器已经开始升级并屏蔽不安全的请求。您可以使用 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>
文档中,以确保整个页面受到保护。