什么是混合内容?

混合内容是指,初始 HTML 通过安全的 HTTPS 连接加载,但其他资源(例如图片、视频、样式表、脚本)通过不安全的 HTTP 连接加载。 这称为混合内容,因为同时加载了 HTTP 和 HTTPS 内容以显示同一网页,并且通过 HTTPS 加载的初始请求是安全的。

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

尽管许多浏览器都会向用户报告混合内容警告,但到时为时已晚:不安全的请求已经执行,网页的安全性受到了威胁。

因此,浏览器越来越多地屏蔽混合内容。如果您的网站包含混合内容,请修复此问题,确保随着浏览器变得越来越严格,内容仍可继续加载。

两种类型的混合内容

混合内容的两种类型是主动和被动混合内容。

被动混合内容是指不与网页的其余部分互动的内容,因此中间人攻击在拦截或更改这些内容后只能执行哪些操作。被动混合内容是指图片、视频和音频内容。

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

被动混合内容

被动混合内容被视为不易出现问题,但仍然会对您的网站和用户构成安全威胁。 例如,攻击者可以拦截针对您网站上图片的 HTTP 请求并交换或替换这些图片;攻击者可以交换“保存”和“删除”按钮图片,致使用户无意删除内容;将产品图表替换为淫秽或色情内容,使您的网站出现不良内容;或者将产品图片替换为其他网站或产品的广告。

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

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

直到最近,所有浏览器都会加载被动混合内容,因为阻止这类内容会破坏许多网站。现在,情况已经开始发生变化,因此请务必更新网站上出现混合内容的所有实例。

Chrome 目前正在推出,尽可能自动升级被动混合内容。自动升级意味着,如果资源可通过 HTTPS 获取,但已硬编码为 HTTP,则浏览器将加载 HTTPS 版本。如果找不到安全版本,则无法加载资源。

每当检测到混合内容或自动升级被动混合内容时,Chrome 都会将详细消息记录到开发者工具中的 Issues 标签页中,以指导您解决特定问题。

Chrome 开发者工具中的“问题”标签页会显示有关特定混合内容问题及其解决方法的详细信息

主动混合内容

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

鉴于这种威胁的严重性,大多数浏览器都已默认屏蔽此类内容,以保护用户,但具体功能会因浏览器供应商和版本而异。

另一个演示包含主动混合内容的示例。通过 HTTP 加载示例,查看通过 HTTPS 加载示例时被阻止的内容。被屏蔽的内容也会在 Issues 标签页中详细说明。

Chrome 开发者工具中的“问题”标签页会显示有关特定混合内容问题及其解决方法的详细信息

混合内容规范

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

根据规范,“当破坏网络大量网络的风险大于允许以混合内容形式使用它的风险时”,该资源属于可选的可屏蔽内容;这是上述被动混合内容类别的一个子集。

所有非可选择屏蔽的内容均被视为可屏蔽,应被浏览器屏蔽。

近年来,HTTPS 使用量大幅增加,已成为网络上的明确默认浏览器。这样一来,浏览器现在就可以考虑屏蔽所有混合内容,甚至包括混合内容规范中定义为“可选择性屏蔽”的子资源类型。因此,我们现在看到 Chrome 对这些子资源采取了更严厉的措施。

旧版浏览器

请务必注意,并不是您网站的每个访问者都使用最新版本的浏览器。 不同浏览器供应商的不同版本对混合内容的处理方式各不相同。最糟糕的是,旧版浏览器和版本根本不会阻止任何混合内容,这对用户来说非常不安全。

通过解决混合内容问题,您可以确保您的内容在新浏览器中可见。 此外,您还有助于保护用户免受旧版浏览器未屏蔽的危险内容的影响。