Chrome 56 中的 API 弃用和移除

Joe Medley
Joe Medley

在几乎每个版本的 Chrome 中,我们都会对该产品及其性能以及 Web 平台的功能进行大量更新和改进。本文介绍了 Chrome 56 中已废弃和移除的功能。Chrome 56 自 12 月 8 日起处于 Beta 版阶段。此列表随时都可能发生变化。

移除对 SHA-1 证书的支持

SHA-1 加密哈希算法首次出现弱点迹象是在 11 年前,而近期的研究表明,可能很快就会出现攻击,这些攻击会直接影响 Web 公钥基础架构 (PKI) 的完整性。

为保护用户免受此类攻击,自 Chrome 56(稳定版于 2017 年 1 月发布)起,Chrome 不再支持 SHA-1 证书。使用此类证书访问网站会导致系统显示插页式警告。如需了解详情,请访问 Chrome 安全博客

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了 TLS 中的 CBC 模式 ECDSA 加密方式

TLS 的 CBC 模式构建存在缺陷,使其易受攻击且很难安全地实现。虽然 CBC 模式加密算法仍广泛用于 RSA,但在 ECDSA 中几乎不存在。其他浏览器仍支持这些加密算法,因此我们认为风险较低。此外,只有少数组织在 TLS 中使用 ECDSA,而且设置通常较为复杂(一些较旧的客户端仅支持 RSA),因此我们希望 ECDSA 网站得到更好的维护,并在发生问题时响应速度更快。

TLS 1.2 添加了基于 AEAD 的新加密方式,这些加密方式可避免这些问题,具体包括 AES_128_GCM、AES_256_GCM 或 CHACHA20_POLY1305。虽然目前我们仅要求基于 ECDSA 的网站执行此操作,但我们建议所有管理员都执行此操作。基于 AEAD 的加密方式不仅可以提高安全性,还可以提高性能。AES-GCM 在近期的 CPU 上具有硬件支持,ChaCha20-Poly1305 支持快速软件实现。同时,使用 CBC 加密方式时,需要对每条传出记录执行缓慢且复杂的缓解措施和 PRNG 访问。基于 AEAD 的加密算法也是实现 HTTP/2 和 False Start 优化的前提条件。

意图移除 | Chrome 状态跟踪器 | Chromium bug

从轻触滚动中移除用户手势

我们发现了多个示例,其中编写不当或恶意的广告会在 touchstart 或所有 touchend 事件上触发触摸滚动导航。如果“滚轮”事件无法打开弹出式窗口,那么触摸滚动也不应打开弹出式窗口。这可能会破坏某些场景,例如,媒体在触摸时无法播放,或弹出式窗口在触摸时无法打开。在所有这些情况下,Safari 都已静默地无法打开弹出式窗口。

移除意图 | Chromestatus 跟踪器 | Chromium bug

禁止提取具有无效类型/语言属性的脚本

目前,无论 typelanguage 属性的值如何,Chrome 的预加载扫描器都会提取 <scripts> 元素中的项,但在解析时不会执行脚本。废弃提取功能后,预加载扫描器和解析器将具有相同的语义,并且我们不会为不会使用的脚本发起提取。这旨在为访问包含大量经过后处理的自定义脚本代码(例如 type="text/template")的网站的用户节省数据。

sendBeacon API 充分涵盖了使用无效脚本对服务器进行 ping 的用例。

此更改使 Chrome 与 Safari 保持一致,但 Firefox 仍会请求脚本,无论类型或语言如何。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了 MediaStreamTrack.getSources()

此方法已不再包含在规范中,并且任何其他主要浏览器都不支持此方法。它已被 MediaDevices.enumerateDevices() 取代,自 47 版起,Blink 无需标志即可支持 MediaDevices.enumerateDevices(),其他浏览器也支持 MediaDevices.enumerateDevices()。相关示例如下所示。这个假设的 getCameras() 函数首先使用特征检测来查找和使用 enumerateDevices()。如果特征检测失败,它会在 MediaStreamTrack 中查找 getSources()。最后,如果不支持任何类型的 API,则返回空的 cameras 数组。

    function getCameras(camerasCallback) {
      var cameras = [];
      if('enumerateDevices' in navigator.mediaDevices) {
         navigator.mediaDevices.enumerateDevices()
          .then(function(sources) {
            return sources.filter(function(source) { 
              return source.kind == 'videoinput' 
            });
          })
          .then(function(sources) {
            sources.forEach(function(source) {
              if(source.label.indexOf('facing back') >= 0) {
                // move front facing to the front.
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            });
            camerasCallback(cameras);
          });
      }
      else if('getSources' in MediaStreamTrack) {
        MediaStreamTrack.getSources(function(sources) {

          for(var i = 0; i < sources.length; i++) {
            var source = sources[i];
            if(source.kind === 'video') {

              if(source.facing === 'environment') {
                // cameras facing the environment are pushed to the front of the page
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            }
          }
          camerasCallback(cameras);
        });
      }
      else {
        // We can't pick the correct camera because the API doesn't support it.
        camerasCallback(cameras);
      }
    };

意图移除 | Chrome 状态跟踪器 | Chromium bug

移除 Firestore-xss CSP 指令

内容安全政策级别 2 规范的早期草稿包含一个 reflected-xss 指令,除了语法不同之外,它提供的功能与 X-XSS-Protection 标头完全相同。此指令已于 2015 年从规范中移除,但在移除之前已在 Chrome 中实现。我们现在将移除对此指令的支持。

移除意图 | Chromestatus 跟踪器 | Chromium bug

替换 CSP“referrer”指令

CSP referrer 指令允许网站所有者通过 HTTP 标头设置引荐来源网址政策。此功能不仅使用率极低,而且不再属于任何 W3C 规范。

仍需要此功能的网站应使用 <meta name="referrer"> 或新的 Referrer-Policy 标头

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了 PaymentAddress.careOf 字段

PaymentAddress 接口有一个非标准的 careOf 字段(没有任何知名地址标准支持该字段)。careOf 字段也是不必要的,收件人和组织字段足以支持所有必要的用例。添加 careOf 会在与现有邮政地址架构和 API 的互操作性方面造成严重问题。如需更详细的讨论,请参阅 GitHub 上的规范移除提案

移除意图 | Chromium bug

移除了 SVGViewElement.viewTarget

SVGViewElement.viewTarget 属性不属于 SVG2.0 规范,并且用量很少或不存在。此属性已在 Chrome 54 中废弃,现已移除。

移除意图 | Chromestatus 跟踪器 | Chromium bug