保護されたコンテキスト

  1. Referer ヘッダーのプライバシーとセキュリティの考慮事項
  2. サブドメインテイクオーバー
  3. サブリソース完全性
  4. トランスポート層セキュリティ
  5. ユーザーによる有効化によって制御される機能
  6. 保護されたコンテキスト
    1. 保護されたコンテキストに制限されている機能
  7. 同一オリジンポリシー
  8. 安全でないパスワード
  9. 実践的なセキュリティ実装ガイド
    1. フォームの自動補完を無効にするには
  10. 攻撃
    1. Clickjacking
  11. 混在コンテンツ
  12. 無信頼の iframe Experimental
  13. 脆弱な署名アルゴリズム
  14. 証明書の透明性

保護されたコンテキスト (セキュアコンテキスト) とは、認証と機密性の一定の最低基準を満たしている WindowWorker のことです。多くの Web API や機能は保護されたコンテキストでのみアクセス可能です。保護されたコンテキストの主な目的は、中間者攻撃 が攻撃の犠牲者をさらに危険にさらす可能性のある強力な API にアクセスすることを防ぐことです。

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

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

  • ユーザーのプライバシーを侵害する
  • ユーザーのコンピューターに対して低水準のアクセス権限を得る
  • ユーザーの認証情報のようなデータへのアクセス権限を得る

コンテキストが安全とみなされるのはいつですか?

コンテキストは、Secure Contexts 仕様で定義されている認証および機密性の一定の最低基準を満たしている場合に、保護されたコンテキストとみなされます。特定の文書が保護されたコンテキストであるトップレベルの閲覧コンテキスト (基本的には、保護されたコンテキストであるウィンドウやタブを含むコンテキスト) のアクティブな文書である場合、その文書は保護されたコンテキストにあるとみなされます。

例えば、<iframe> 内で TLS 上で配信された文書であっても、TLS 上で配信されなかった祖先がある場合には、そのコンテキストは安全であるとは見なされません

しかし、安全ではないコンテキストによって (noopener を指定してもしなくても) 新しいウィンドウが作成された場合、 オープナーが安全ではないという事実は、新しいウィンドウが安全であるとみなされるかどうかに影響を与えないことに注意してください。これは、特定の文書が保護されたコンテキストにあるかどうかの判断は、それが関連付けられているトップレベルの閲覧コンテキスト内でそれを考慮することにのみ基づいており、保護されていないコンテキストがたまたまその文書を作成するために使用されたかどうかではないからです。

http://127.0.0.1 の URL、http://localhost の URL、http://*.localhost の URL (例 http://dev.whatever.localhost/) 、file:// の URL など、ローカルに配信されたリソースも安全に配信されていると考えられます。

メモ: Firefox 84 以降では、http://localhosthttp://*.localhost というURLを信頼できるオリジンとして扱っています (以前のバージョンでは、localhost がローカル/ループバックアドレスにマップされると保証されていなかったため、信頼できるオリジンとしては扱っていませんでした) 。

ローカルではないリソースが安全であるとみなされるためには、以下の基準を満たす必要があります。

  • https:// または wss:// URL で提供されなければなりません
  • リソースを配信するために使用されるネットワークチャネルのセキュリティプロパティは、非推奨と見なされてはなりません

機能の判別

ページは、 Window.isSecureContext または WorkerGlobalScope.isSecureContext という論理値を使用して、安全なコンテキストにあるかどうかを調べることができます。これらの値はグローバルスコープで公開されます。

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

仕様書

Specification
Secure Contexts

関連情報