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;
デモで実際にお試しください。
意見交換とフィードバックの提供
フィードバックを共有したり、問題を報告したりするには、Issue を送信するか、GitHub のディスカッションに参加してください。