Chrome 56 淘汰和移除 API

喬梅利
Joe Medley

在絕大多數的 Chrome 版本中,我們都發現大量的更新和改善項目,包含產品、效能和網路平台的功能。本文說明 Chrome 56 的淘汰及移除功能 (於 12 月 8 日推出 Beta 版)。這份清單隨時可能有所變動。

停止支援 SHA-1 憑證

SHA-1 加密編譯雜湊演算法在 11 年前首次顯示出弱點近期的研究則指出最可能直接影響網路公開金鑰基礎架構 (PKI) 完整性的攻擊行為。

為保護使用者不受這類攻擊,Chrome 56 起將不再支援 SHA-1 憑證 (預計於 2017 年 1 月推出穩定版)。造訪使用這類憑證的網站時,系統會顯示插頁式警告。如需更多詳細資訊,請參閱 Chrome 安全性網誌

意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤

移除傳輸層安全標準 (TLS) 中的 CBC 模式 ECDSA 加密

TLS 的 CBC 模式建構不良,因此變得較脆弱且難以安全地實作。雖然 CBC 模式加密仍廣泛用於 RSA,但與 ECDSA 幾乎並不存在。其他瀏覽器仍支援這些加密機制,我們相信風險較低。此外,少數機構採用傳輸層安全標準 (TLS) 中的 ECDSA,通常採用較複雜的設定 (部分舊版用戶端僅支援 RSA),因此我們希望 ECDSA 網站可以獲得更好的維護,並在發生問題時採取更回應。

TLS 1.2 已根據 AEADs 新增加密作業,以避免這些問題 (尤其是 AES_128_GCM、AES_256_GCM 或 CHACHA20_POLY1305)。雖然我們目前只要求 ECDSA 型網站使用此功能,但我們建議所有系統管理員都這麼做。以 AEAD 為基礎的加密不僅可以提升安全性,也能提升效能。AES-GCM 對近期 CPU 和 ChaCha20-Poly1305 提供硬體支援,並允許快速軟體實作。同時,CBC 加密則需要執行緩慢的複雜緩解措施,以及每個傳出記錄的 PRNG 存取。採用 AEAD 的加密也是 HTTP/2 和 False Start 最佳化的先決條件。

意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤

從觸控捲動中移除使用者手勢

我們已經看到多個範例,說明文字品質不佳或惡意廣告,會在 touchstart 或所有 touchend 事件上觸發觸控捲動瀏覽動作。如果「輪盤」事件無法開啟彈出式視窗,則觸控捲動功能不應也不應。這可能會中斷某些情況,例如媒體無法在觸控時播放,或者是使用者輕觸時無法開啟彈出式視窗。發生上述任何情況時,Safari 一直無法顯示彈出式視窗。

意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤

不允許對類型/語言屬性無效的指令碼進行所有擷取

無論 typelanguage 屬性的值為何,Chrome 的預先載入掃描器目前都會擷取 <scripts> 元素中的項目,但剖析時並不會執行指令碼。透過淘汰擷取作業,預先載入掃描器和剖析器將有相同的語意,而且我們不會針對不會使用的指令碼啟動擷取作業。這項資料是儲存使用者前往的網站時,如果他們擁有大量經過後續處理的自訂指令碼標記 (例如 type="text/template"),就能儲存資料。

使用無效指令碼對伺服器進行連線偵測 (ping) 伺服器的用途,充分涵蓋 sendBeacon API

這項變更會根據 Chrome 與 Safari 保持一致,但無論類型或語言為何,Firefox 仍會要求指令碼。

意圖移除 | Chrome 狀態追蹤工具 | 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);
      }
    };

意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤

移除反映的 xss CSP 指令

內容安全政策等級 2 規格的早期草稿包含 reflected-xss 指令,該指令提供的只有不同語法的 X-XSS-Protection 標頭。這個指令已從 2015 年的規格中移除,但在 Chrome 中實作之前則尚未移除。 我們現在會移除這項指令的支援功能。

意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤

替換 CSP「referrer」指令

CSP referrer 指令可讓網站擁有者透過 HTTP 標頭設定參照網址政策。這項功能不僅使用率極低,也不再是任何 W3C 規格的一部分。

如果網站仍需要這項功能,則應使用 <meta name="referrer"> 或新的 Referrer-Policy 標頭

意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤

移除 PaymentAddress.careOf 欄位

PaymentAddress 介面含有非標準 careOf 欄位 (沒有已知的地址標準支援該欄位)。careOf 欄位也是非必要的,收件者和機構欄位可以充分支援所有必要用途。新增 careOf 對現有郵寄地址結構定義和 API 的互通性而言,會造成重大問題。詳情請參閱 GitHub 的規格移除提案

意圖移除 | Chromium 錯誤

移除 SVGViewElement.viewTarget

SVGViewElement.viewTarget 屬性不屬於 SVG2.0 規格的一部分,使用太小或不存在。這項屬性已在 Chrome 54 版中淘汰,現已移除。

意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤