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
Lax
Mode がセットされている(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の記事で、このプロテクションの利点と導入方法について詳しく説明しています。