オリジン間リソースポリシー (CORP)
オリジン間リソースポリシーは HTTP の Cross-Origin-Resource-Policy ヘッダー によって設定されるポリシーで、ウェブサイトやアプリケーションが他のオリジンから (<script> や <img> などの要素を使用して発行された) 特定のリクエストに対する保護をオプトインすることで、 Spectre のような投機的なサイドチャネル攻撃や、クロスサイトスクリプトインクルージョン攻撃を緩和することができます。
CORP はデフォルトで同一オリジンポリシーを超えた保護の追加レイヤーです。
メモ:
このポリシーは、デフォルトで CORS セーフリストメソッド/ヘッダーに対して発行される、no-cors リクエストに対してのみ有効です。
このポリシーはレスポンスヘッダーを介して表現されるため、実際のリクエストは防止されません。むしろ、ブラウザーはレスポンス本文を削除することで結果が漏洩するのを防ぎます。
使用方法
メモ: 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 リクエストを拒否します。
オリジン間埋め込みポリシー (COEP) との関係
HTTP の Cross-Origin-Embedder-Policy レスポンスヘッダーを文書に対して使用した場合、サブリソースに対して、文書と同じオリジンであるか、あるいは埋め込みを許可していることを示す Cross-Origin-Resource-Policy レスポンスヘッダーを伴うことを要求することができます。これが、cross-origin という値が存在する理由です。
歴史
コンセプトは 2012 年に(From-Originとして)元々提案されましたが、2018 年の Q2 に再提案されて Safari と Chromium に実装されました。
2018 年の前半に、Meltdown と Spectre として知られる 2 つのサイドチャネルハードウェア脆弱性が公表されました。パフォーマンスを改善するために設計された投機的実行機能の一部として生じた競合状態により、これらの脆弱性は機密性の高いデータを漏洩する可能性があります。
オリジン間リソースポリシー (CORS) は、サイトが望ましくない no-cors のオリジン間リクエストを直接ブロックするための手段として策定されました。これは、攻撃者がレスポンスにアクセスする前にブラウザーがレスポンスの本文を削除するため、Spectre のような攻撃に対する効果的な防御策となります。
仕様書
| 仕様書 |
|---|
| Fetch> # cross-origin-resource-policy-header> |
ブラウザーの互換性
関連情報
- HTTP
Cross-Origin-Resource-Policyヘッダー