API のサポート終了と削除(Chrome 56)

Joe Medley
Joe Medley

ほぼすべてのバージョンの Chrome で、プロダクト、そのパフォーマンス、ウェブ プラットフォームの機能に多くの更新と改善が加えられています。この記事では、Chrome 56 で非推奨となった機能と削除された機能について説明します。Chrome 56 は 12 月 8 日時点でベータ版です。このリストは随時変更される可能性があります。

SHA-1 証明書のサポートを削除

SHA-1 暗号化ハッシュ アルゴリズムは、11 年以上前に最初の脆弱性が発見されました。また、最近の研究では、ウェブ公開鍵基盤(PKI)の完全性に直接的に影響する攻撃の可能性が高まっていることが指摘されています。

このような攻撃からユーザーを保護するため、Chrome 56 以降(2017 年 1 月に安定版がリリース)では SHA-1 証明書のサポートが終了します。このような証明書を使用しているサイトにアクセスすると、インタースティシャル警告が表示されます。詳しくは、Chrome セキュリティ ブログをご覧ください。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

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 の最適化の前提条件でもあります。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

タップ スクロールからユーザー操作を削除

touchstart イベントまたはすべての touchend イベントでタップ スクロールのナビゲーションをトリガーする、不適切に記述された広告や悪意のある広告のが複数確認されています。「ホイール」イベントでポップアップを開けない場合は、タップ スクロールでも開けない必要があります。これにより、タップしたときにメディアが再生されない、タップしたときにポップアップが開かないなどのシナリオが破綻する可能性があります。Safari では、すでにこのようなすべてのシナリオでポップアップが開かれません。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

無効なタイプ/言語属性を持つスクリプトの取得をすべて禁止

現在、Chrome のプリロード スキャナは、type 属性または language 属性の値に関係なく、<scripts> 要素内のアイテムを取得しますが、解析時にスクリプトは実行されません。フェッチを非推奨にすることで、プリロード スキャナとパーサーのセマンティクスが同じになり、使用しないスクリプトのフェッチが開始されなくなります。これは、(type="text/template" など)後処理が必要なカスタム スクリプトタグが大量に含まれるサイトにアクセスするユーザーのデータ保存を目的としています。

無効なスクリプトを使用してサーバーに ping を送信するケースは、sendBeacon API で十分にカバーされています。

この変更により Chrome は Safari に対応するようになりますが、Firefox は種類や言語に関係なくスクリプトをリクエストします。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

MediaStreamTrack.getSources() を削除

このメソッドは仕様の一部ではなくなっており、他の主要なブラウザではサポートされていません。これは、MediaDevices.enumerateDevices() に置き換えられました。Blink はバージョン 47 以降、フラグなしでサポートされており、他のブラウザでもサポートされています。以下に例を示します。この仮想の getCameras() 関数は、まず特徴検出を使用して enumerateDevices() を見つけて使用します。特徴検出が失敗した場合は、MediaStreamTrackgetSources() を検索します。最後に、どの種類の 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 トラッカー | Chromium のバグ

reflected-xss CSP ディレクティブを削除

Content Security Policy Level 2 仕様の初期ドラフトには、X-XSS-Protection ヘッダーと構文が異なるだけの reflected-xss ディレクティブが含まれていました。このディレクティブは 2015 年に仕様から削除されましたが、Chrome に実装される前には削除されました。このディレクティブのサポートは終了します。

削除の目的 | Chromestatus Tracker | Chromium バグ

CSP の「referrer」ディレクティブを置き換える

CSP referrer ディレクティブにより、サイト所有者は HTTP ヘッダーからリファラー ポリシーを設定できました。この機能は使用が非常に少ないだけでなく、W3C 仕様に含まれなくなりました。

この機能がまだ必要なサイトは、<meta name="referrer"> または新しい Referrer-Policy ヘッダーを使用する必要があります。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

PaymentAddress.careOf フィールドを削除

PaymentAddress インターフェースには、標準ではない careOf フィールドがあります(既知のアドレス標準でサポートされていません)。careOf フィールドも不要です。受信者と組織のフィールドは、必要なすべてのユースケースを十分にサポートします。careOf を追加すると、既存の郵便番号スキーマと API との相互運用性に関して重大な問題が発生します。詳細については、GitHub の仕様の削除に関する提案をご覧ください。

削除の目的 | Chromium バグ

SVGViewElement.viewTarget を削除

SVGViewElement.viewTarget 属性は SVG2.0 仕様に含まれておらず、使用頻度が低いか、使用されていません。この属性は Chrome 54 で非推奨になり、削除されました。

削除の目的 | Chromestatus Tracker | Chromium バグ