如果某个网页的初始 HTML 是通过安全的 HTTPS 连接加载,但其他资源(例如图片、视频、样式表和脚本)是通过不安全的 HTTP 连接加载的,则该网页会包含“混合内容”。名称是指单个网页上的 HTTP 和 HTTPS 内容混合在一起。
使用不安全的 HTTP 协议请求子资源会削弱网页的安全性,因为这些请求容易受到路径攻击,即攻击者窃听网络连接,并查看或修改双方之间的通信。通过使用这些资源,攻击者可以跟踪用户并替换网站上的内容;如果是主动混合内容,攻击者可以完全控制网页,而不仅仅是控制不安全资源。
虽然许多浏览器都会向用户报告混合内容警告,但报告往往过晚:不安全的请求已执行,网页的安全性受到了威胁。
出于安全考虑,大多数浏览器现在都会屏蔽混合内容。请将不安全的内容请求更改为安全内容,以确保您的网页能继续正确加载。
两种类型的混合内容
混合内容有两种类型:主动和被动混合内容。
被动混合内容(包括图片、视频和音频)不会与网页的其余部分互动,因此中间人攻击在拦截或更改这些内容后,可执行的操作会受到限制。
主动混合内容作为一个整体与网页互动。这包括脚本、样式表、iframe 以及浏览器可下载和执行的任何其他代码。针对主动混合内容的攻击让攻击者几乎可以对网页执行任何操作。
被动混合内容
被动混合内容的风险比主动混合内容更低,但这种风险仍然存在。例如,攻击者可以执行以下操作:
- 拦截针对您网站上图片的 HTTP 请求,并交换或替换这些图片。
- 替换按钮上的图片,让用户混淆按钮,例如删除他们本打算保存的内容。
- 通过将图片替换为色情内容来污损您的网站。
- 用宣传其他内容的广告替换您的商品图片。
即使攻击者没有更改您网站的内容,他们仍然可以通过混合内容请求跟踪用户。还可以根据浏览器加载的图片或其他资源来判断用户访问了哪些页面以及查看了哪些产品。
如果存在被动混合内容,即使网页本身是通过 HTTPS 加载的,大多数浏览器也会在地址栏中指明网页不安全。您可以在此演示中观察此行为。
直到最近,被动混合内容才会加载在所有浏览器中,因为屏蔽被动混合内容会破坏许多网站。现在,情况已经开始发生变化,因此请务必更新网站上出现混合内容的所有实例。
在某些情况下,Chrome 会自动升级被动混合内容。这意味着,如果资源已被硬编码为 HTTP,但可通过 HTTPS 获取,浏览器会加载 HTTPS 版本。如果没有安全版本,则资源不会加载。
每当 Chrome 检测到混合内容或自动升级被动混合内容时,都会将详细消息记录到开发者工具的 Issues 标签页中,为您提供解决特定问题的建议。
主动混合内容
与被动混合内容相比,主动混合内容造成的威胁更大。攻击者可以拦截和重写主动内容,利用这些内容完全控制您的网页,甚至整个网站。这样一来,他们就可以更改网页的任何方面,包括显示不同的内容、窃取用户密码或其他登录凭据、窃取用户会话 Cookie,或将用户完全重定向到其他网站。
由于主动混合内容的风险非常高,因此大多数浏览器都已默认屏蔽此类内容以保护用户,但其行为因浏览器供应商和版本而异。
此演示展示了主动混合内容的示例。通过 HTTP 加载示例,以查看通过 HTTPS 加载示例时被阻止的内容。开发者工具中的 Issues 标签页也详细说明了被屏蔽的内容。
混合内容规范
浏览器遵循混合内容规范,该规范定义了可选可屏蔽的内容和可屏蔽内容类别。
“当破坏网络大部分内容的风险超过了允许以混合内容形式使用它的风险时”,该资源即被视为可选的可屏蔽内容。这是被动混合内容的子集。
所有非可选择屏蔽的混合内容均被视为可屏蔽,且应被浏览器屏蔽。
近年来,HTTPS 使用量大幅增加,已成为网络上的明确默认浏览器。因此,浏览器现在可以考虑屏蔽所有混合内容,甚至包括混合内容规范中定义的那些子资源类型,并将其设为“可选择性屏蔽”。
旧版浏览器
部分访问者可能使用旧版浏览器。不同供应商的不同浏览器版本对混合内容的处理方式有所不同。最糟糕的是,旧版浏览器和版本根本不会阻止任何混合内容,这对用户来说是不安全的。
通过安全地加载所有资源并解决混合内容问题,您可以确保您的内容可见,并保护用户免受旧版浏览器可能无法拦截的危险内容的影响。