Cross-Origin-Opener-Policy (COOP)は現在、ChromeやFirefoxで実装が進められている機能です。
仕様としては、whatwgで長らく議論がされており、おそらく仕様に入るでしょう
- Restricting cross-origin WindowProxy access (Cross-Origin-Opener-Policy) · Issue #3740 · whatwg/html · GitHub
- Cross-Origin-Opener-Policy: provide a clearer spec. · Issue #4580 · whatwg/html · GitHub
面白そうなので、簡単に読んで見る。今の所下記ドキュメントが定義のようだが、適宜議論を参照のこと
間違ってたらご指摘ください
Cross-Origin-Opener-Policy とは
ユーザがサイトAを閲覧しているとき
サイトA から サイトBをウィンドウとして開いた場合 (noopnerはつけてない)、Bはwindow.openerを介してAにアクセスすることができます(仮にAとBのオリジンが違っていても、制限はありますがAのプロパティにアクセスできます。)
このようなアクセスは、サイトのアイソレーション上好ましくありません。このようなことを防ぐために、Cross-Origin-Opener-Policyヘッダを利用します。もし、指定されたPolicyに合わない場合は、上記のような繋がりは解除されます(ウィンドウを閉じて開き直したのと同じ状態)
Cross-Origin-Opener-Policyは下記のような値を取ります。
Cross-Origin-Opener-Policy = same-origin Cross-Origin-Opener-Policy = same-site Cross-Origin-Opener-Policy = same-origin unsafe-allow-outgoing
A及び、Bそれぞれへのアクセスした際はポリシーに合わず、openerがnullを返すようになります
- Aもしくは、BのどちらかのみにレスポンスヘッダでCross-Origin-Opener-Policyが設定される
- AとBのCross-Origin-Opener-Policyのsameness (same-origin or same-site)が異なる
- 値がsame-originだが、AとBのオリジンが異なる
- 値がsame-siteだが、AとBのホスト名が異なる
こうすることで、noopenerを指定できる開く側だけでなく、開かれる側からもopenerのつながりを解除することができるようになります。(unsafe-allow-outgoingを指定すると開く側のときだけ許可する)
おまけ
議論の変遷のなかで、openerのポリシーへとヘッダ名とともに変遷しており、議論を追うのが大変だった...