Cross-Origin-Embedder-Policyヘッダについて

ChromeがCross-Origin-Embedder-Policy (COEP)の実装に着手しそうなので、ざっと仕様を眺める(議論段階であり、正式な仕様ではありません)
mikewest.github.io

ちょっと話が難しいので間違ってたらすみません。

なお以前は、仕様名は「Cross-Origin-Resource-Policy-Policy(CORP-P)」などとも呼ばれていた。仕様自体の議論や、名称の変遷については下記Issueを参照のこと
Opting into a CORS-only mode (Cross-Origin) · Issue #4175 · whatwg/html · GitHub

Cross-Origin-Embedder-Policy

Spectre攻撃以後、サイドチャネル攻撃を用いてメモリの内容を推測できる場合、Same-Originポリシーは十分ではないことがわかっています。つまり、ブラウザにクロスオリジンのリソースを読み込ませることに成功すれば、内容を推測できる可能性が出てきたわけです。

Cross-Origin-Embedder-Policyヘッダでは、埋め込むリソースがCross-Origin-Resource-Policyを明示するように強制します。また、そのためにCross-Origin-Resource-Policy: same-site (仕様上だとcross-originという表記もある)を指定できるように拡張します。

CORP自体は以前書いたとおりです
asnokaze.hatenablog.com


このドキュメントでは変更に合わせ、HTMLやFetchの仕様に対してモンキーパッチを当てています。

流れ

ブラウザは、example.comからhtmlファイルを読み込みます。このとき、レスポンスにCross-Origin-Embedder-Policy:require-corpヘッダがついています。これによって、サブリソースは Cross-Origin-Resource-Policyが必須になります。

サブリソースのレスポンスにCross-Origin-Resource-Policy:cross-siteとクロスオリジンでの読み込みを明示すると、ブラウザはそのリソースを読み込めるようになります。

f:id:ASnoKaze:20190623013333p:plain