当页面的初始 HTML 通过安全的 HTTPS 连接加载时,但其他资源(例如图像、视频、样式表和脚本)通过不安全的 HTTP 连接加载时,页面就具有混合内容。该名称指的是单个页面上 HTTP 和 HTTPS 内容的混合。
使用不安全的 HTTP 协议请求子资源会削弱页面的安全性,因为这些请求容易受到路径攻击的影响,在这种攻击中,攻击者会窃听网络连接并查看或修改两方之间的通信。使用这些资源,攻击者可以跟踪用户并替换网站上的内容,并且在主动混合内容的情况下,他们可以完全控制页面,而不仅仅是不安全的资源。
尽管许多浏览器会向用户报告混合内容警告,但该报告通常为时已晚:不安全的请求已经执行,页面的安全性已受到损害。
出于安全原因,大多数浏览器现在阻止混合内容。将不安全的内容请求更改为安全内容,以确保您的页面保持正确加载。
两种类型的混合内容
混合内容有两种类型:主动型和被动型。
被动混合内容,包括图像、视频和音频,不与页面的其余部分交互,因此中间人攻击在拦截或更改该内容时可以执行的操作受到限制。
主动混合内容与整个页面交互。这包括脚本、样式表、iframe 以及浏览器可以下载和执行的任何其他代码。对主动混合内容的攻击使攻击者几乎可以对页面执行任何操作。
被动混合内容
被动混合内容的风险低于主动混合内容,但风险仍然存在。例如,攻击者可以
- 拦截您网站上图像的 HTTP 请求,并交换或替换这些图像。
- 替换按钮上的图像,以便用户混淆它们,例如,删除他们打算保存的内容。
- 通过用色情内容替换您的图像来破坏您的网站。
- 用其他内容的广告替换您的产品图像。
即使攻击者不更改您网站的内容,他们也可以通过混合内容请求跟踪用户。他们还可以根据浏览器加载的图像或其他资源来判断用户访问了哪些页面以及查看了哪些产品。
如果存在被动混合内容,即使页面本身是通过 HTTPS 加载的,大多数浏览器也会在地址栏中指示页面不安全。您可以在此演示中观察到此行为。
直到最近,被动混合内容才在所有浏览器中加载,因为阻止它会破坏许多网站。这种情况现在开始改变,因此更新您网站上的任何混合内容实例至关重要。
在某些情况下,Chrome 会自动升级被动混合内容。这意味着,如果某个资源已被硬编码为 HTTP,但可以通过 HTTPS 获得,则浏览器会加载 HTTPS 版本。如果没有安全版本,则资源不会加载。
每当 Chrome 检测到混合内容或自动升级被动混合内容时,它都会将详细消息记录到 DevTools 中的问题标签中,以就如何解决您的特定问题向您提供建议。

主动混合内容
主动混合内容比被动混合内容构成更大的威胁。攻击者可以拦截和重写主动内容,并使用它来完全控制您的页面甚至整个网站。这使他们可以更改页面的任何方面,包括显示不同的内容、窃取用户密码或其他登录凭据、窃取用户会话 Cookie 或将用户完全重定向到其他站点。
由于主动混合内容的风险如此之高,因此大多数浏览器已经默认阻止此类内容以保护用户,但不同浏览器供应商和版本之间的行为有所不同。
此演示显示了主动混合内容的示例。通过 HTTP 加载示例以查看当您通过 HTTPS 加载示例时阻止的内容。阻止的内容也在 DevTools 中的问题标签中详细说明。

混合内容规范
浏览器遵循混合内容规范,该规范定义了可选阻止内容和可阻止内容类别。
当“允许将其用作混合内容的风险超过了破坏 Web 重要部分的风险”时,资源被归类为可选阻止内容。这是被动混合内容的子集。
所有不是可选阻止的混合内容都被视为可阻止,并且应被浏览器阻止。
近年来,HTTPS 使用率大幅上升,并且已成为 Web 上明确的默认设置。这使得浏览器现在更可行地考虑阻止所有混合内容,即使是混合内容规范中定义为可选阻止的那些子资源类型。
旧版浏览器
某些访问者可能使用旧版浏览器。来自不同供应商的不同浏览器版本对混合内容的处理方式不同。在最坏的情况下,旧版浏览器和版本根本不阻止任何混合内容,这对用户来说是不安全的。
通过安全地加载所有资源并修复混合内容问题,您可以确保您的内容可见,并保护用户免受旧版浏览器可能无法阻止的危险内容的影响。