Chrome 56 中的 API 弃用和移除

Joe Medley
Joe Medley

在几乎每个版本的 Chrome 中,我们都看到了针对产品及其性能以及网络平台功能的大量更新和改进。本文介绍了截至 12 月 8 日 Chrome 56(Beta 版)中的弃用和移除功能。此列表随时可能发生变化。

取消对 SHA-1 证书的支持

SHA-1 加密哈希算法在 11 年前首次出现弱势迹象最近的研究指出,攻击即将发生直接影响网络公钥基础架构 (PKI) 完整性的攻击。

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

意图移除 | Chromestatus Tracker | Chromium 错误

移除 TLS 中的 CBC 模式 ECDSA 加密

TLS 的 CBC 模式结构存在缺陷,因而脆弱且很难安全实现。虽然 RSA 仍然广泛采用 CBC 模式加密,但 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 优化的先决条件。

意图移除 | Chromestatus Tracker | Chromium 错误

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

我们之前看到过多个示例,其中的广告内容不当或恶意会在 touchstart 或所有 touchend 事件上触发触摸滚动导航。如果“wheel”事件无法打开弹出式窗口,则触摸滚动也不应打开。这可能会中断某些情况,例如,轻触时媒体不播放,或轻触时弹出式窗口无法打开。在所有这些情况下,Safari 已经无法打开弹出式窗口且不显示任何提示。

意图移除 | Chromestatus Tracker | Chromium 错误

禁止对具有无效类型/语言属性的脚本进行所有抓取

目前,无论 typelanguage 属性的值如何,Chrome 的预加载扫描器都会提取 <scripts> 元素中的内容,但解析时不会执行该脚本。废弃提取后,预加载扫描器和解析器将具有相同的语义,并且我们不会对不使用的脚本启动提取。如果用户访问的网站包含大量已经过后处理的自定义脚本代码(例如 type="text/template"),这样做可以为用户保存数据。

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

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

意图移除 | Chromestatus Tracker | Chromium 错误

移除 MediaStreamTrack.getSources()

此方法不再属于规范的一部分,而且不受其他任何主流浏览器支持。它已被 MediaDevices.enumerateDevices() 取代,Blink 从 47 版开始便支持无标志,并且其他浏览器也支持后者。相关示例如下所示。这个假设的 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);
      }
    };

意图移除 | Chromestatus Tracker | Chromium 错误

移除了反射 xss CSP 指令

内容安全政策级别 2 规范的早期草稿包含 reflected-xss 指令,该指令除了提供不同的语法之外,只提供 X-XSS-Protection 标头。该指令已从 2015 年从规范中移除,但该指令在 Chrome 中实现之前并未移除。现已取消对此指令的支持。

意图移除 | Chromestatus Tracker | Chromium 错误

替换 CSP“referrer”指令

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

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

意图移除 | Chromestatus Tracker | Chromium 错误

移除 PaymentAddress.careOf 字段

PaymentAddress 接口有一个非标准的 careOf 字段(没有众所周知的地址标准支持该字段)。careOf 字段也是不必要的,收件人和组织字段已充分支持所有必要的用例。添加 careOf 会在与现有邮政地址架构和 API 的互操作性方面带来重大问题。如需了解更完整的讨论,请参阅 GitHub 上的规范移除方案

意图移除 | Chromium 错误

移除了 SVGViewElement.viewTarget

SVGViewElement.viewTarget 属性不属于 SVG2.0 规范,其使用率很低或不存在。此属性在 Chrome 54 中已弃用,现已移除。

意图移除 | Chromestatus Tracker | Chromium 错误