Cross-Origin Resource Policy (CORP)
クロスオリジンリソースポリシーは Cross-Origin-Resource-Policy
ヘッダーによって設定されるポリシーで、ウェブサイトやアプリケーションが他のオリジンから (<script>
や <img>
などの要素を使用して発行された) 特定のリクエストに対する保護をオプトインすることで、 Spectre のような投機的なサイドチャネル攻撃や、クロスサイトスクリプトインクルージョン攻撃を緩和することができます。
CORP は既定で same-origin policy を超えた保護の追加レイヤーです。クロスオリジンリソースポリシーは、既定でクロスオリジンの読み込みを保護するメカニズムである、 クロスオリジンリードブロッキング (CORB)を補完します。
メモ:
このポリシーは、既定で CORS セーフリストメソッド/ヘッダーに対して発行される、no-cors
リクエストに対してのみ有効です。
このポリシーは*レスポンスヘッダーを介して表現されるため、実際のリクエストは防止されません。むしろ、ブラウザーは応答本文を削除することで結果*が漏洩するのを防ぎます。
歴史
コンセプトは 2012 年に(From-Origin
として)元々提案されましたが、2018 年の Q2 に再提案されて Safari と Chromium に実装されました。
2018 年の前半に、Meltdown と Spectre として知られる 2 つのサイドチャネルハードウェア脆弱性が公表されました。パフォーマンスを改善するために設計された投機的実行機能の一部として生じた競合状態により、これらの脆弱性は機密性の高いデータを漏洩することができます。
これを受けて Chromium は Cross-Origin Read Blocking を実装しました。これにより、クロスオリジンの読み込みに対してリソース(Content-Type
が HTML、JSON、XML)を自動的に保護します。アプリケーションが no-sniff
ディレクティブを渡していない場合、Chromium は Content-Type
を推測しようと試みて、とにかく保護を適用します。
クロスオリジンリソースポリシーはどのようなリソースでも保護することができるオプトインのレスポンスヘッダーです。ブラウザーが MIME タイプを嗅ぎ分ける必要はありません。
使用方法
メモ: Chrome のバグが原因で、クロスオリジンリソースポリシーが PDF の描画を破壊し、訪問者が PDF の 1 ページ目以降を読めない可能性があります。本番環境ではこのヘッダーの仕様には注意してください。
ウェブアプリケーションは、次の 3 つの値の中から 1 つ受け取ることができる Cross-Origin-Resource-Policy
の HTTP レスポンスヘッダーを介してクロスオリジンリソースポリシーを設定します。
- same-site
-
同じ Site からのリクエストのみリソースを読み込めます。
警告: これはオリジンよりも安全性が低いものです。2 つのオリジンが同じサイトであるかどうかをチェックするアルゴリズムは HTML 標準で定義されており、登録可能なドメインをチェックします。
- same-origin
-
同じ origin (すなわち、スキーマ + ホスト + ポート) からのリクエストのみリソースを読み込めます。
- cross-origin
-
いかなる origin (same-site と cross-site 両方) からのリクエストでもリソースを読み込めます。
Cross-Origin-Resource-Policy: same-site | same-origin | cross-origin
クロスオリジンリソースポリシーチェックの際に、ヘッダーが設定されている場合、ブラウザーは異なるオリジンやサイトから発行された no-cors
リクエストを拒否します。
ブラウザーの互換性
BCD tables only load in the browser
仕様書
Specification |
---|
Fetch Standard # cross-origin-resource-policy-header |
関連情報
Cross-Origin-Resource-Policy
HTTP Header- Bugzilla bug 1459573