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