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年の前半に、MeltdownSpectre として知られる 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 リクエストを拒否します。

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
Cross-Origin-Resource-PolicyChrome 完全対応 73
補足
完全対応 73
補足
補足 Until version 75, downloads for files with this header would fail in Chrome. See bug 952834.
補足 From version 80, linearized PDFs served inline with this header fail to render properly. See bug 1074261.
Edge 完全対応 79Firefox 完全対応 74
完全対応 74
完全対応 69
無効
無効 From version 69: this feature is behind the browser.tabs.remote.useCORP preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 12WebView Android 完全対応 73
補足
完全対応 73
補足
補足 Until version 75, downloads for files with this header would fail in WebView. See bug 952834.
補足 From version 80, linearized PDFs served inline with this header fail to render properly. See bug 1074261.
Chrome Android 完全対応 73
補足
完全対応 73
補足
補足 Until version 75, downloads for files with this header would fail in Chrome. See bug 952834.
補足 From version 80, linearized PDFs served inline with this header fail to render properly. See bug 1074261.
Firefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 完全対応 12Samsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

仕様書

仕様書 状態 備考
Fetch 現行の標準 初回定義

関連情報