匿名 iframe オリジン トライアル: COEP 環境に iframe を簡単に埋め込む

Arthur Sonzogni
Arthur Sonzogni

COEP を使用しているデベロッパーは、COEP 自体は使用しないサードパーティの iframe を埋め込むことができるようになりました。

COEP が必要な理由

一部のウェブ API は、Spectre などのサイドチャネル攻撃のリスクを高めます。このリスクを軽減するために、ブラウザにはクロスオリジン分離と呼ばれるオプトインベースの分離環境が用意されています。この環境では、COEP のデプロイが必要になります。これにより、ウェブサイトは SharedArrayBufferperformance.measureUserAgentSpecificMemory()高精度で解像度の高いタイマーなどの特権機能を使用できるようになります。

クロスオリジン分離を有効にするには、ウェブサイトが次の 2 つの HTTP ヘッダーを送信する必要があります。

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

COEP を有効にする際の課題

クロスオリジン分離により、ウェブページのセキュリティが強化され、強力な機能を有効にできますが、COEP のデプロイは難しい場合があります。最大の課題の一つは、すべてのクロスオリジン iframe に COEP と CORP もデプロイする必要があることです。これらのヘッダーのない iframe はブラウザによって読み込まれません。

通常、iframe はサードパーティによって配信されているため、COEP のデプロイは容易ではない場合があります。

匿名 iframe の活用

そこで匿名 iframe の出番です。anonymous 属性を <iframe> 要素に追加すると、iframe は別のエフェメラル ストレージ パーティションから読み込まれ、COEP の制限の対象外になります。

例:

<iframe anonymous src="https://example.com">

iframe は新しいエフェメラル コンテキストで作成され、トップレベルのウェブサイトに関連付けられた Cookie にアクセスできません。空の Cookie ジャーから始まります。同様に、LocalStorageCacheStorageIndexedDB などのストレージ API は、新しいエフェメラル パーティションにデータを読み込んで保存します。パーティションのスコープは、現在の最上位ドキュメントと iframe のオリジンです。最上位のドキュメントがアンロードされると、ストレージはクリアされます。

匿名 iframe には COEP 埋め込みルールは適用されません。ただし、毎回新しい空のコンテキストから読み込まれるため、安全性は確保されています。データはパーソナライズされずに読み込まれます。公開データのみが含まれており、攻撃者にとって価値はありません。

デモ

匿名 iframe は https://anonymous-iframe.glitch.me/ で確認できます。

オリジン トライアルに登録する

匿名 iframe がデベロッパーのクロスオリジン分離の導入に役立つように、Chrome バージョン 106 ~ 108 でオリジン トライアルとして匿名 iframe を利用できるようにします。

オリジン トライアルに登録して、ウェブサイトで匿名 iframe を使用できるようにします。

  1. 送信元のトークンをリクエストします。
  2. トークンは、次のいずれかの方法で使用します。
    • 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
  3. 匿名の iframe をページに追加します。 html <iframe anonymous src="https://example.com">

この機能についてフィードバックがある場合は、GitHub リポジトリに問題を報告してください。

サードパーティ オリジンのトライアル

オリジン トライアルはサードパーティ スクリプトでも利用できます。つまり、ページに埋め込まれたスクリプトによって有効にできます。

詳しくは、サードパーティ オリジン トライアルに登録する方法をご覧ください。

よくある質問

この機能は他のブラウザにも採用されますか?

<iframe anonymous> 内にネストされた iframe は匿名ですか?

はい。継承されます。iframe が匿名になると、anonymous 属性がなくても、サブツリー全体のすべての iframe に適用されます。

<iframe anonymous> から作成されたポップアップも匿名ですか?

noopener が設定されている場合と同様にポップアップが開きます。これらは新しい通常のトップレベル コンテキストから作成され、匿名ではありません。匿名 iframe と通信できません。

リソース