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 のディスカッションに参加してください。