Chrome 135 以降では、新しい sandbox 値 allow-same-site-none-cookies を使用できます。このポリシーが指定され、サードパーティ Cookie が利用できない場合、ブラウザはファーストパーティのサンドボックス化された iframe から送信される HTTP リクエストでのみ SameSite=None Cookie を送信します。
サンドボックス化された iframe とは何ですか?
サンドボックス化された iframe は、特別な制限が適用された iframe です。null の不透明なオリジンを持つものとして扱われます。デフォルトでは、スクリプト、フォーム、ポップアップなどの有害な可能性のある機能は、サンドボックス化された iframe 内では使用できません。
sandbox 属性を使用して、サンドボックス化された iframe で使用できる機能を指定します。次に例を示します。
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
サンドボックス化は、埋め込みコンテンツを正常に読み込むために必要な権限をきめ細かく選択し、潜在的なエクスプロイトの範囲を制限できるため、常に有効にしておくことをおすすめします。
この新しいポリシーが必要な理由
allow-same-site-none-cookies の導入前は、サンドボックス化された iframe 内で 2 つの Cookie シナリオを構成できました。
sandbox属性にallow-same-originトークンがない場合、iframe のオリジンはnullとしてシリアル化され、サンドボックス化されたページからのすべてのリクエストがクロスサイトになります。この場合、SameSite=Noneのある Cookie のみがリクエストに含まれます。sandbox属性にallow-same-originトークンを指定すると、リクエストは iframe の実際のオリジンから送信されたものとして扱われ、任意のSameSite値を持つ Cookie を送信できるようになります。
サードパーティ Cookie がブロックされている場合、allow-same-origin がないサンドボックス化された iframe は、allow-same-site-none-cookies を有効にしない限り Cookie を送信できません。
allow-same-origin を含む iframe は、サードパーティ Cookie がブロックされている場合でも、同一サイトのリクエストに Cookie を含めることができます。ただし、オリジン全体の Cookie ジャーが、悪意のある可能性のあるウェブ アクティビティに公開されます。
allow-same-site-none-cookies を使用すると、iframe は HTTP リクエストで SameSite=None Cookie を送信できますが、機密性の高い SameSite=Strict Cookie と SameSite=Lax Cookie は含まれません。
実用的な例
ユーザーがカスタム コーディング プロジェクトを作成して実行し、他のユーザーのコードを埋め込むことができるサイト practice-coding.example を考えてみましょう。このサービスを利用するには、ユーザーがログインする必要があります。ログインすると、SameSite=Strict セッション Cookie が設定されます。
別のユーザーがプロジェクト practice-coding.example/cookie-theft を作成します。他のユーザーは、このプロジェクトを iframe として自分のプロジェクトに埋め込むことができます。SameSite=Strict Cookie と SameSite=Lax Cookie が practice-coding.example/cookie-theft iframe に公開されると、悪意のあるユーザーが他のユーザーのセッション Cookie を盗む可能性があります。
このシナリオでは、サイトの所有者は機密性の高い Cookie へのアクセスを制限することが望ましい場合があります。ただし、サンドボックス化された iframe 内で SameSite=None Cookie を許可したい場合もあります。たとえば、practice-coding.example/coding-interview サンドボックス化された iframe では、候補者がコードを再確認できるように SameSite=None Cookie が必要になる場合があります。allow-same-site-none-cookies を設定すると、必要な SameSite=None Cookie を選択的に許可しながら、Cookie ジャー全体が公開されるのを防ぐことができます。
ファーストパーティのサンドボックス化されたフレーム内で SameSite=None のみを許可するにはどうすればよいですか?
ファーストパーティのサンドボックス化されたページからのリクエストで SameSite=None Cookie を有効にするには、iframe タグで allow-same-site-none-cookies トークンを指定します。次に例を示します。
<iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>
Content-Security-Policy HTTP ヘッダーを使用して allow-same-site-none-cookies ポリシーを設定することもできます。
Content-Security-Policy: sandbox allow-same-site-none-cookies;
デモで実際にお試しください。
意見交換とフィードバックの提供
フィードバックを共有したり、問題を報告したりするには、問題を送信するか、GitHub のディスカッションに参加してください。