1. はじめに
以下の HTTP Response Headers に関するメモです。
- COEP (Cross Origin Embedder Policy)
- COOP (Cross Origin Opener Policy)
- CORP (Cross Origin Resource Policy)
- CORS (Cross Origin Resource Sharing)
どれもセキュリティに関連しています。
2. ポイント
一覧表
ヘッダー | 設定するところ | 対象リソース | 説明 |
---|---|---|---|
COEP (Cross Origin Embedder Policy) |
リソースを読み込む側 |
|
|
COOP (Cross Origin Opener Policy) |
読み込まれるリソース側 |
|
|
CORP (Cross Origin Resource Policy) |
読み込まれるリソース側 |
|
|
CORS(Cross Origin Resource Sharing) | 読み込まれるリソース側 |
|
|
ポイント1
COEP は、クロスオリジンなリソース側にCORP or CORS の設定を強制する。
例えば、以下の HTTP Response Header がセットされたリソースファイルは、クロスオリジンでは読み込めない。
Cross-Origin-Resource-Policy: same-origin
(引用元:Security headers quick reference)
ポイント2
以下の2つのヘッダーをセットすることで、cross-origin isolated な Webページにすることができる。
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
cross-origin isolated な Webページにすることで、以下が利用可能になる。
- SharedArrayBuffer
- performance.measureUserAgentSpecificMemory()
- JS Self Profiling API
※ COEP と COOP とは、機能的に直接関係しているわけではない。
ポイント3
cross-origin 環境の場合、COOP を使わなくても window.opener への参照は利用できない(実験した)。cross-origin へのアクセスはブロックされ、SecurityError が発生する。但し、postMessage() は利用できる。
一方、cross-origin 環境で COOPに same-origin を指定すると、アクセスがブロックされるのではなく、window.opener が null になるようだ。なので postMessage() も利用できない。
3. 注意
間違っている箇所があるかもしれません。その場合は訂正します。