什么是“混合内容”,为什么 Chrome 会阻止它?

早先,谷歌浏览器已经开始限制网络上的某些“混合内容”。现在,谷歌宣布将采取更严格的措施:从2020年初开始,Chrome浏览器将默认阻止所有混合内容,这可能会影响到一些现有的网页。这究竟意味着什么呢?

什么是混合内容?

网络内容传输主要有两种方式:一种是通过安全加密的HTTPS连接,另一种是通过未加密的HTTP连接。使用HTTPS时,传输过程中的数据不会被窃取或篡改。因此,在处理财务信息或私人数据时,重要的网站都会选择提供加密连接。

现在,互联网正朝着更加安全的HTTPS网站发展。如果你访问一个使用旧的、未加密的HTTP协议的网站,谷歌浏览器会警告你该网站“不安全”。谷歌甚至默认隐藏了“https://”指示符,因为它认为网站默认情况下应该是安全的。同时,新的HTTP/3标准也将内置加密功能。

然而,有些网页并非完全是HTTPS或HTTP。部分网页使用安全的HTTPS连接,但在其中会引入通过未加密HTTP连接传输的图像、脚本或其他资源。这类网页被称为具有“混合内容”,因为它们本身并不完全安全。虽然网页本身不会被篡改,但它可能会加载那些可能被篡改的脚本、图片或iframe(网页中嵌套的另一个网页)。

混合内容的危害

混合内容的存在让人感到困惑。用户可能会认为他们正在访问一个安全网页,但实际上该网页是不完全安全的。举例来说,一个看似安全可靠的网页可能会通过HTTP连接引入一个JavaScript文件。这个脚本有可能被恶意修改,比如当你使用不安全的公共Wi-Fi网络时。被修改后的脚本可能会在网页上执行有害的操作,如监控你的键盘输入或植入追踪cookie。

虽然脚本和iframe(即“活动内容”)是危险性最高的混合内容,但即便是图像、视频和音频的混合内容也存在风险。例如,你正在浏览一个安全的股票交易网站,该网站通过HTTP协议获取股票历史图像。这个图像传输过程不安全,它可能在传输过程中被篡改,从而显示不准确的数据。此外,由于数据是通过未加密连接传输的,任何截取数据的人都可能知道你正在关注哪些股票。

总而言之,使用混合内容是不可取的。如果网页使用HTTPS协议,那么它所引用的所有资源也应该通过HTTPS加载。这源于历史原因,因为网络最初是基于HTTP协议的,后来网站才逐渐升级到HTTPS。在升级过程中,开发者并非总是及时更新所有资源,使其都使用HTTPS。或者,他们可能依赖于当时不支持HTTPS的第三方资源。

现在,随着谷歌和其他浏览器供应商对混合内容的处理变得更加严格,网站开发者必须对他们的网站进行清理,确保其网页能够正常运行。

Chrome的具体变化

目前,Chrome浏览器会阻止混合脚本和iframe。在即将发布的Chrome 80版本中(预计在2020年1月发布到早期发布渠道),Chrome还会阻止混合音频和视频资源。更准确地说,Chrome会尝试通过安全的HTTPS连接加载这些资源,如果无法实现,则会阻止加载。混合图像虽然可以加载,但Chrome会提示该网页“不安全”。在Chrome 81版本中,Chrome将完全停止加载混合图像。用户可以选择允许加载混合内容,但默认情况下不会加载。

这些措施都是为了使网络更加安全。谷歌在其博客文章中表示,他们预计“不安全”的提示“将促使网站将其图像迁移到HTTPS。”

Chrome如何允许用户解锁混合内容

Chrome浏览器已经通过地址栏中的盾牌图标和“不安全内容被阻止”的提示来阻止某些类型的混合内容。你可以通过访问谷歌创建的混合内容示例页面来了解它是如何运作的。例如,要取消阻止混合内容的脚本,你必须点击名为“加载不安全脚本”的链接。

如果你同意运行混合内容,网页的状态会从安全变为不安全。

谷歌将在2019年12月发布的Chrome 79版本中简化这一过程。你只需点击页面地址左侧的锁定图标,然后选择“站点设置”,即可取消阻止该网站的混合内容。

这一选项的入口更加隐蔽,但这正是重点:大多数人应该不需要为网站启用混合内容。网站开发者需要修复他们的网站,确保安全地交付资源。这个选项的存在是为了确保那些使用旧商业网站的人仍然可以访问该网站,即使默认情况下禁用混合内容。

如果你确实需要访问一个必须启用混合内容的网站,请不必担心:谷歌目前尚未宣布何时会删除Chrome中加载混合内容的选项。谷歌的网络浏览器将默认阻止所有混合内容,但在可预见的未来,仍然会提供启用混合内容的选项。

其他浏览器的情况如何?

Chrome浏览器并不是唯一采取这种措施的浏览器。Firefox也会阻止诸如脚本和iframe之类的混合内容,你需要点击“暂时禁用保护”设置才能重新启用它。我们期待Mozilla能够效仿谷歌的做法。苹果公司的Safari浏览器也开始阻止混合内容

此外,微软的新Edge浏览器是基于与谷歌Chrome相同的Chromium代码构建的,因此它的行为也会与Chrome类似。