浏览器 HTTP(S) 混合内容测试评估报告

1.背景介绍

Google Chrome 浏览器将在 2021 年 1 月的稳定版更新中,默认阻断多种形式的 ”混合内容“下载 (mixed content downloads),即 ”从 HTTPS 站点发出的非 HTTPS 下载“。
其排期计划如下:

其中, Mixed Content 分为以下两类:

  • Active mixed content, 主动式混合内容, 如 JS 脚本、CSS 样式表、 AJAX 请求、a 标签下载资源等 ==> 屏蔽资源

  • Passive mixed content,被动式混合内容, 如背景图片、IMG 标签图片、嵌入式音视频资源等 ==> 尝试升级到 https,如果升级失败,则屏蔽资源


2. 测试结果

2.1 Chrome 87

测试页面: https://s3.stdio.io/
测试平台1:【MacOS + Chrome stable】Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36

文件类型 HTTPS 资源 HTTP 资源,后端支持 HTTPS HTTP 资源,后端不支持HTTPS
img 标签图片
(自动升级到 https 请求)
(右击保存图片,未提示警告)
X
script 标签 JS 脚本 X X
link 标签 CSS 样式 X X
AJAX 请求(允许跨越) X X
二进制程序下载 X
(无法启动下载)
X
(无法启动下载)
安卓 APK 下载 X
(无法启动下载)
X
(无法启动下载)
压缩文件下载 X
(无法启动下载)
X
(无法启动下载)
PDF 文件下载
(正常下载)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)
MP3 文件下载
(正常下载)

(正常下载,未提示警告)

(正常下载,未提示警告)
图片文件下载
(正常下载)

(正常下载,未提示警告)

(正常下载,未提示警告)

2.2 Chrome 88, 89

测试页面: https://s3.stdio.io/

测试平台2:【MacOS + Chrome Beta】 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.87 Safari/537.36

测试平台3:【MacOS + Chrome Canary】Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4364.0 Safari/537.36

(Chrome 88 与 89 在以下测试项中表现一致)

文件类型 HTTPS 资源 HTTP 资源,后端支持 HTTPS HTTP 资源,后端不支持HTTPS
img 标签图片
(自动升级到 https 请求)
(右击保存图片,提示警告,按钮默认 Discard)
X(自动升级到 https 请求失败)
(无法右击保存)
script 标签 JS 脚本 X X
link 标签 CSS 样式 X X
AJAX 请求(允许跨越) X X
二进制程序下载 X
(无法启动下载)
X
(无法启动下载)
安卓 APK 下载 X
(无法启动下载)
X
(无法启动下载)
压缩文件下载 X
(无法启动下载)
X
(无法启动下载)
PDF 文件下载
(正常下载)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)
MP3 文件下载
(正常下载)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)
图片文件下载
(正常下载)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)
X
(无法启动下载,a 标签 + 合适的 MIME 会自动跳转页面预览)

3. 结论与建议

  • 备注

    • 1) 2021-01-26 更新: 实测 MacOS Chrome 88 稳定版,混合内容的策略同 87 版本,无变更

    • 2) 以上测试所得出的结论,即 “Chrome 88 存在更严格的下载屏蔽策略,Console 提示已屏蔽不安全资源的下载”,这一测试结果存在于部分设备上,符合 Google 公告描述;
      另外部分同事使用 Beta 版测试的结论是 “混合内容的下载策略变得更宽松,包括 二进制程序、安卓 APK、压缩文件、文档、MP3 等均可直接下载, Console 提示未来会屏蔽该类资源下载”;
      由于此事实与 Google 公告相悖,我们对即将到来的 stable 版本具体表现尚存在疑虑。 由于不安全下载最终肯定会被 chrome 屏蔽,建议是做最坏的准备。

    • 3) 相关变更主要围绕 “混合内容下载”,核心是 “下载” 行为,对于其他的页面资源加载过程,暂无重大变更。

建议如下

  • 对于被动式混合内容,即页面内嵌的音视频、图片资源等,Chrome 浏览器会自动升级到 HTTPS 请求; 只要保证这些资源可通过 HTTPS 访问,不需要对网站代码进行修改

  • 对于主动式混合内容:

    • JS、CSS 等页面资源加载,以及 iframe、AJAX 请求会被浏览器阻断, 需要更新相关网站代码,保证全部为 HTTPS 资源 (Chrome 浏览器在之前版本已经默认屏蔽该类资源加载)

    • 不安全的(HTTP)文件下载链接,需要升级为 HTTPS 链接
      (通过 a 标签外链或下载的图片、PDF 等可预览资源,如果 MIME 头正确,浏览器可能会自动跳转页面查看,不会启动下载,影响较小,但是仍建议升级为 HTTPS)

发表回复

您的电子邮箱地址不会被公开。