Cross-Origin-Opener-Policy
October 1, 2020
ウェブサイトの window オブジェクトにアクセスすることは、さまざまな XS-Leak 手法にとって共通の前提条件です。
Framing Protections は、攻撃者が window オブジェクトにアクセスするために iframe を使用できないようにすることができますが、 window.open(url) や window.opener の参照を通して開かれたウィンドウから、 window オブジェクトにアクセスすることを止めることはできません。
XS-Leaks を window.open で悪用することは、一般的に攻撃者にとって最も魅力のない方法と考えられています。なぜなら、ユーザーは開いているブラウザウィンドウでそれが起こるのを見ることができるからです。しかし、次のような場合には、正しい方法です。
- Framing Protectionsがセットされている
- Same-Site Cookies with
LaxMode がセットされている(Strictモードとは対照的に,Laxモードではトップレベルのウィンドウを移動することができます)
他のウェブサイトがページへの任意のウィンドウ参照を得ることを防ぐために、アプリケーションは Cross-Origin-Opener-Policy (COOP) 1 2 を展開することができます。
COOPヘッダーには3つの値があります。
unsafe-none- これはデフォルトの値で、値が設定されていない場合にウェブサイトがどのように振る舞うかを示しています。same-origin- これは最も厳しい値です。same-originを設定すると、クロスオリジンのウェブサイトは新しいウィンドウを開いてwindowオブジェクトにアクセスすることができなくなります。もし、アプリケーションがwindow.openを使って別のウェブサイトを開いて通信することに依存している場合、same-originによってブロックされます。これが問題になる場合は、代わりにsame-origin-allow-popupsを設定してください。same-origin-allow-popups- この値はあなたのウェブサイトがwindow.openを使用することを許可しますが、他のウェブサイトがあなたのアプリケーションに対してwindow.openを使用することは許可されません。
可能であれば、same-originを設定することをお勧めします。same-origin-allow-popups を設定した場合は、 window.open で開くウェブサイトを確認し、そのウェブサイトが信頼できるものであることを確認するようにしてください。
考慮事項 #
COOP はオプトインのメカニズムであり、非常に新しいものなので、開発者やセキュリティエンジニアは簡単に見落としてしまいます。
それでもこの防御メカニズムは重要です。
なぜなら、攻撃者が window.open のような API が返すウィンドウ参照を利用する XS-Leak を悪用するのを防ぐ唯一の方法だからです(Strict モードの SameSite Cookie が広く展開されない限り)。
デプロイメント #
web.devの記事で、このプロテクションの利点と導入方法について詳しく説明しています。