什么是混合内容?

当网页的初始 HTML 通过安全的 HTTPS 连接加载,但其他资源(例如图片、视频、样式表和脚本)通过不安全的 HTTP 连接加载时,该网页就具有混合内容。该名称是指单个网页上 HTTP 和 HTTPS 内容的混合。

使用不安全的 HTTP 协议请求子资源会削弱网页的安全性,因为这些请求容易受到中间人攻击,攻击者会窃听网络连接并查看或修改双方之间的通信内容。利用这些资源,攻击者可以跟踪用户并替换网站上的内容;如果是主动混合内容,他们可以完全控制网页,而不仅仅是不安全的资源。

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

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

两种类型的混合内容

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

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

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

被动型混合内容

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

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

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

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

在最近之前,所有浏览器都会加载被动混合内容,因为屏蔽此类内容会破坏许多网站。不过,这种情况现在开始发生变化,因此请务必更新您网站上的所有混合内容。

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

每当 Chrome 检测到混合内容或自动升级被动混合内容时,它都会在开发者工具的 Issues 标签页中记录详细消息,以便为您提供有关修复特定问题的建议。

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

主动型混合内容

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

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

演示展示了主动混合内容的示例。通过 HTTP 加载示例,查看当您通过 HTTPS 加载示例时被屏蔽的内容。开发者工具的问题标签页中也会详细列出被屏蔽的内容。

Chrome DevTools 中的“问题”标签页会显示有关特定混合内容问题的详细信息以及如何修正该问题
为了加强网站的安全性,系统会屏蔽一些不安全的资源。

混合内容规范

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

如果“允许将其用作混合内容的风险超过了破坏网络大部分内容的风险”,则资源符合可选择性屏蔽的内容的条件。这是被动混合内容的一个子集。

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

近年来,HTTPS 的使用量大幅增加,并且已成为网络上的明确默认设置。这使得浏览器现在可以更可行地考虑阻止所有混合内容,即使是混合内容规范中定义为可选择阻止的那些子资源类型。

旧版浏览器

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

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