什么是混合内容?

如果网页的初始 HTML 通过安全的 HTTPS 连接加载,但其他资源(例如图片、视频、样式表和脚本)通过不安全的 HTTP 连接加载,则该网页包含混合内容。该名称是指单个网页上混合使用 HTTP 和 HTTPS 内容的情况。

使用不安全的 HTTP 协议请求子资源会降低网页的安全性,因为这些请求容易受到路径攻击,攻击者会窃听网络连接,并查看或修改两方之间的通信。攻击者可以使用这些资源跟踪用户并替换网站上的内容,对于主动混合内容,攻击者可以完全控制网页,而不仅仅是控制不安全的资源。

虽然许多浏览器都会向用户报告混合内容警告,但报告通常太晚了:不安全的请求已执行,网页的安全性已受到损害。

现在,大多数浏览器出于安全考虑会屏蔽混合内容。将不安全的内容请求更改为安全内容,以确保您的网页能够继续正确加载。

两种混合内容

混合内容分为两种:主动内容和被动内容。

混合被动内容(包括图片、视频和音频)不会与网页的其余部分互动,因此,如果中间人攻击拦截或更改了这些内容,其攻击范围会受到限制。

主动型混合内容会与整个网页互动。这包括脚本、样式表、iframe 以及浏览器可以下载和执行的任何其他代码。攻击混合主动内容会让攻击者几乎可以对网页执行任何操作。

被动混合内容

虽然被动型混合内容的风险低于主动型混合内容,但仍存在风险。例如,攻击者可以:

  • 拦截对您网站上图片的 HTTP 请求,并交换或替换这些图片。
  • 替换按钮上的图片,导致用户混淆按钮,例如删除他们打算保存的内容。
  • 将图片替换为色情内容,从而破坏网站。
  • 将商品图片替换为宣传其他商品的广告。

即使攻击者未更改您网站的内容,也能通过混合内容请求跟踪用户。他们还可以根据浏览器加载的图片或其他资源,了解用户访问了哪些网页以及查看了哪些商品。

如果存在被动混合内容,大多数浏览器都会在地址栏中指明网页不安全,即使网页本身是通过 HTTPS 加载的也是如此。您可以在此演示中观察到这种行为。

直到最近,所有浏览器都会加载被动混合内容,因为屏蔽这些内容会导致许多网站无法正常运行。这种情况现在开始发生变化,因此请务必更新您网站上的所有混合内容。

在某些情况下,Chrome 会自动升级混合被动内容。这意味着,如果资源已被硬编码为 HTTP,但可通过 HTTPS 使用,浏览器会加载 HTTPS 版本。如果没有安全版本,系统将不会加载资源。

每当 Chrome 检测到混合内容或自动升级混合被动内容时,都会将详细消息记录到 DevTools 的 Issues(问题)标签页中,以便为您提供有关如何解决具体问题的建议。

Chrome 开发者工具中的“问题”标签页会显示有关具体混合内容问题的详细信息,以及如何解决此问题
每个不安全的资源都会在开发者工具中列出,并附带限制状态。

主动型混合内容

主动型混合内容比被动型混合内容构成的威胁更大。攻击者可以拦截和重写动态内容,并利用这些内容来完全控制您的网页甚至整个网站。这样,攻击者就可以更改网页的任何方面,包括显示不同的内容、窃取用户密码或其他登录凭据、窃取用户会话 Cookie,或将用户重定向到完全不同的网站。

由于混合主动内容的风险非常高,因此大多数浏览器已默认屏蔽此类内容以保护用户,但浏览器供应商和版本之间的行为会有所不同。

演示展示了主动混合内容的示例。通过 HTTP 加载示例,看看在通过 HTTPS 加载示例时被屏蔽的内容。您还可以在开发者工具的问题标签页中详细了解被屏蔽的内容。

Chrome 开发者工具中的“问题”标签页会显示有关具体混合内容问题以及如何解决该问题的详细信息
为加强您网站的安全性,我们屏蔽了一些不安全的资源。

混合内容规范

浏览器遵循混合内容规范,该规范定义了可选择性屏蔽的内容屏蔽的内容类别。

“如果允许将资源用作混合内容的风险小于破坏网络的大部分内容的风险,则该资源属于可选择性屏蔽的内容”。这属于被动混合内容的一部分。

所有非可选择屏蔽的混合内容都被视为可屏蔽,并且应由浏览器屏蔽。

近年来,HTTPS 的使用量大幅增加,已成为网络上的明确默认协议。这样一来,浏览器现在更有可能考虑屏蔽所有混合内容,即使是混合内容规范中定义为可选择屏蔽的子资源类型也是如此。

旧版浏览器

有些访问者可能使用的是旧版浏览器。不同供应商的不同浏览器版本对混合内容的处理方式不同。在最糟糕的情况下,旧版浏览器和版本根本不会屏蔽任何混合内容,这对用户来说并不安全。

通过安全地加载所有资源并解决混合内容问题,您可以确保自己的内容可见,并保护用户免受旧版浏览器可能不会屏蔽的危险内容的侵害。