Secure Contexts

安全であるために必要最小限な要件をブラウザが満たしている場合、そのブラウザは 安全なコンテキスト(Secure Context) の中にいると考えます。ブラウザは安全なコンテキストの確認を行うことで、ユーザの通信に安全性が確保されている場合のみ利用を許可するべき API を公開できます。

アクセスを制限するべき機能がある理由

Web の API には強力なものもあり、攻撃者に対して以下のような(それよりも多くの)能力を与えてしまう可能性があります。

  • ユーザのプライバシーを侵害する
  • ユーザのコンピュータに対して低レイヤーのアクセス権限を得る
  • ユーザの機密情報に対するアクセス権限を得る

コンテキストが安全とみなされる条件

コンテキストが安全とみなされるのは、安全な通信路かローカル環境から送信される場合です。そのコンテキストがフレームの内側ではなく、かつトップレベルのブラウザコンテキストでもない場合、安全なコンテキストであるためには、自分の親が安全なコンテキストでなければなりません。

http://localhostfile:// のようなパスを持つローカルファイルは安全とみなされます。

ローカルに存在しないコンテキストが安全であるためには、 https://wss:// のスキームで、かつ廃止されることがないようなプロトコルで送信されなければなりません。

機能の判別

グローバルスコープで利用できる isSecureContext の真偽値を用いることで、そのページ自身が安全なコンテキストの中にいるかどうか確かめることができます。すなわち、アクセスを安全なコンテキストのみに制限している API を利用できるか判別することができます。

if (window.isSecureContext) {
  // Service Worker が実行されているので、このページは安全なコンテキストです
  navigator.serviceWorker.register("/offline-worker.js").then(function () {
    ...
  });
}

安全なコンテキストを必要とする API

草案として提案されている API

ブラウザ

仕様には明記されていませんが、ブラウザによっては特定の API に対して secure context の制約を課している場合があります。

  Chrome Safari Firefox
getUserMedia

利用不可

Chrome 47 で削除

 

一時的なアクセスのみ可 (ユーザがパーミッション要求のダイアログで「この設定を記憶する」を選択できない)

Geolocation

利用不可

Chrome 50 で削除

利用不可

削除

Removal in progress

Firefox 55 で削除予定

EME 廃止の警告表示    
Device motion / orientation 廃止の警告表示    
MIDI 利用不可    
Web Cryptography API HTTPS に制限されているが、以前より Secure Context は必要条件    

最新のブラウザ実装状況は http://permission.site を参照してください。

注釈: Safari と Chrome は secure contexts の仕様を完全には実装していないため、HTTP ページ内の iframe や、非安全なページの 'opener context' を有するページ (HTTP ページから window.open や target="_blank" を使用した場合) での iframe が動作することがあります。

仕様

仕様書 策定状況 備考
Secure Contexts 草案 Editor’s Draft

関連情報

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: hashedhyphen
 最終更新者: hashedhyphen,