COEP を使用するデベロッパーは、COEP 自体を使用しないサードパーティの iframe を埋め込むことができるようになりました。
COEP が必要な理由
一部のウェブ API では、Spectre などのサイドチャネル攻撃のリスクが高まります。このリスクを軽減するため、ブラウザにはクロスオリジン分離と呼ばれるオプトイン ベースの隔離環境が用意されています。この環境では特に COEP をデプロイする必要があります。これにより、ウェブサイトで SharedArrayBuffer
、performance.measureUserAgentSpecificMemory()
、高解像度の高精度タイマーなどの特権機能を使用できるようになります。
クロスオリジン分離を有効にするには、ウェブサイトで次の 2 つの HTTP ヘッダーを送信する必要があります。
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
COEP を有効にする際の課題
クロスオリジン分離により、ウェブページのセキュリティが向上し、強力な機能を有効にすることができます。ただし、COEP のデプロイは困難です。最大の課題の 1 つは、すべてのクロスオリジンの iframe で COEP と CORP もデプロイしなければならないことです。これらのヘッダーのない iframe は、ブラウザによって読み込まれません。
iframe は通常、COEP のデプロイが難しいサードパーティによって提供されます。
匿名 iframe で解決
そこで役立つのが匿名 iframe です。anonymous
属性を <iframe>
要素に追加すると、iframe は別のエフェメラル ストレージ パーティションから読み込まれ、COEP の制限の対象ではなくなります。
例:
<iframe anonymous src="https://example.com">
iframe は新しい一時的なコンテキストで作成され、トップレベルのウェブサイトに関連付けられた Cookie にはアクセスしません。空の Cookie JAR から始まります。同様に、LocalStorage
、CacheStorage
、IndexedDB
などのストレージ API は、新しいエフェメラル パーティションにデータを読み込んで保存します。パーティションのスコープは、現在の最上位のドキュメントと iframe のオリジンです。ストレージは、最上位のドキュメントがアンロードされるとクリアされます。
匿名 iframe は、COEP 埋め込みルールの対象ではありません。毎回新しい空のコンテキストから読み込まれるため、これは依然として安全です。データがパーソナライズされることなく読み込まれます。一般公開データのみが含まれ 攻撃者にとって価値がありません
デモ
匿名 iframe は https://anonymous-iframe.glitch.me/ で確認できます。
オリジン トライアルに登録する
デベロッパーによるクロスオリジン分離の導入に匿名 iframe が役立つように、Google は Chrome のバージョン 106 ~ 108 で匿名 iframe をオリジン トライアルとして利用できるようにしています。
オリジン トライアルに登録して、ウェブサイトで匿名 iframe を使用できるようにします。
- 送信元のトークンをリクエストします。
- トークンは次のいずれかの方法で使用します。
- HTML 内:
html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
- JavaScript で:
js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
- HTTP ヘッダー:
text Origin-Trial: TOKEN_GOES_HERE
- HTML 内:
- 匿名の iframe をページに追加します:
html <iframe anonymous src="https://example.com">
この機能についてフィードバックがある場合は、GitHub リポジトリで問題を報告してください。
サードパーティのオリジン トライアル
オリジン トライアルはサードパーティのスクリプトでも利用できます。これは、ページに埋め込まれたスクリプトによって有効にできることを意味します。
Leran は、サードパーティのオリジン トライアルに登録する方法について詳細に学習しました。
よくある質問
この機能は他のブラウザにも導入されますか?
<iframe anonymous>
内にネストされた iframe は匿名ですか?
はい。これは継承されます。iframe が匿名になると、anonymous
属性がない場合でも、サブツリー内のすべての iframe に適用されます。
<iframe anonymous>
から作成されたポップアップも匿名になりますか?
ポップアップは noopener
が設定されているかのように開きます。これらは新しい通常のトップレベル コンテキストから作成され、匿名ではありません。匿名 iframe とは通信できません。