デベロッパーが Cookie を「パーティション分割」にオプトインできるようにするCookie ビンをトップレベル サイトごとに分けて作成します。
実装ステータス
- Chrome 114 以降ではデフォルトでサポートされています。
- Chrome 100 ~ 116 でオリジン トライアルが利用可能になりました。
- テストの目的とリリースの目的を確認します。
CHIPS とは
Cookies Having Independent Partitioned State(CHIPS)により、デベロッパーは、トップレベル サイトごとに個別の Cookie JAR を使用してパーティション化されたストレージに Cookie をオプトインし、ユーザーのプライバシーとセキュリティを改善できます。
パーティショニングせずにサードパーティ Cookie を使用すると、サービスはユーザーをトラッキングし、多くの無関係なトップレベル サイトからユーザーの情報を結合できます。これをクロスサイト トラッキングと呼びます。
ブラウザは、パーティション分割されていないサードパーティ Cookie の段階的な廃止を進めており、CHIPS、Storage Access API、関連ウェブサイト セットが、サードパーティ Cookie がブロックされた場合に、iframe などのクロスサイト コンテキストから Cookie を読み書きする唯一の方法となるでしょう。
<ph type="x-smartling-placeholder">![2 つの異なるウェブサイト間で料理を共有する方法を示す図。](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/without-cookie-partitioni-bb0cbbf0c63d.png?authuser=7&hl=ja)
CHIPS では、トップレベル コンテキストによってパーティション分割されたクロスサイト Cookie をサポートするために、新しい Cookie 属性 Partitioned
が導入されています。
Set-Cookie ヘッダー:
Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;
JavaScript:
document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"
パーティション分割されたサードパーティ Cookie は、最初に設定された最上位のサイトに関連付けられており、他の場所からはアクセスできません。これにより、サードパーティ サービスによって設定された Cookie は、最初に設定されたトップレベル サイトの埋め込みコンテキスト内でのみ読み取ることができます。
<ph type="x-smartling-placeholder">![共通のサードパーティを埋め込んでいる 2 つの異なるウェブサイトが、そのサードパーティの Cookie を共有しなくなることを示す図。](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/with-cookie-partitioning-d3df97804f836.png?authuser=7&hl=ja)
パーティション分割 Cookie では、ユーザーがサイト A にアクセスし、サイト C の埋め込みコンテンツが Partitioned 属性で Cookie を設定すると、サイト A への埋め込み時にサイト C が設定した Cookie 専用のパーティション化された jar に Cookie が保存されます。最上位のサイトが A の場合にのみ、ブラウザはその Cookie を送信します。
ユーザーが新しいサイト(サイト B など)にアクセスした際、埋め込まれた C フレームは、サイト A に C が埋め込まれたときに設定された Cookie を受信しません。
ユーザーがトップレベル ウェブサイトとしてサイト C にアクセスした場合、サイト A への埋め込み時に C によって設定されたパーティション分割された Cookie は、そのリクエストでも送信されません。
<ph type="x-smartling-placeholder">![2 つの異なるウェブサイトに同じサードパーティが埋め込まれている場合に、Cookie が共有されないことを示す図。](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/with-cookie-partitioning-a19ff8bdd6d0d.png?authuser=7&hl=ja)
ユースケース
たとえば、サイト retail.example
でサードパーティ サービス support.chat.example
を利用して、サイトにサポート チャット ボックスを埋め込むことができます。現在、埋め込み可能なチャット サービスの多くは、状態の保存に Cookie を使用しています。
![埋め込みチャット ウィジェットが表示されたウェブサイトを示す図](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/top-level-site-retailexa-b1bf622bc028e.png?authuser=7&hl=ja)
support.chat.example
を埋め込んでいる最上位のサイト Retail.example です。クロスサイト Cookie を設定できない場合、support.chat.example
は状態を保存するための別のメソッド(多くの場合はより複雑なもの)を見つける必要があります。または、最上位のページに埋め込む必要があり、認証 Cookie へのアクセスなど、support.chat.example
スクリプトが Retail.example に対する昇格した権限を取得できるため、リスクが発生します。
CHIPS は、パーティション分割されていない Cookie に伴うリスクを負うことなく、引き続きクロスサイト Cookie を使い続けるための簡単なオプションです。
CHIPS のユースケースの例には、クロスサイト サブリソースで、単一のトップレベル サイトでのユーザーのアクティビティを対象としたセッションまたは永続状態の概念が必要なシナリオが含まれます。次に例を示します。
- サードパーティのチャットの埋め込み
- サードパーティの地図の埋め込み
- サードパーティによる支払いの埋め込み
- サブリソースの CDN ロード バランシング
- ヘッドレス CMS プロバイダ
- 信頼できないユーザー コンテンツを提供するサンドボックス ドメイン(googleusercontent.com や githubusercontent.com など)
- Cookie を使用して、ファーストパーティ サイトの認証ステータスによってアクセス制御されたコンテンツを配信するサードパーティの CDN(サードパーティの CDN でホストされているソーシャル メディア サイトのプロフィール写真など)
- リクエストで Cookie を使用するリモート API に依存するフロントエンド フレームワーク
- パブリッシャーごとに状態スコープを設定する必要がある埋め込み広告(例: そのウェブサイトでユーザーの広告表示設定を取得する)
CHIPS がオプトイン パーティショニング モデルを使用している理由
ブラウザがパーティショニングされていないサードパーティ Cookie を段階的に廃止するのに伴い、パーティショニングに対して他にもいくつかのアプローチが試みられています。
Firefox は、ETP の厳格モードとシークレット ブラウジング モードですべてのサードパーティ Cookie をデフォルトでパーティショニングすると発表しました。これにより、すべてのクロスサイト Cookie がトップレベル サイトで分割されます。ただし、サードパーティのオプトインなしで Cookie をパーティショニングすると、予期しないバグが発生する可能性があります。これは、一部のサードパーティ サービスが、パーティション分割されていないサードパーティ Cookie を想定するサーバーを構築しているためです。
Safari は以前、ヒューリスティックに基づく Cookie のパーティショニングを試しましたが、最終的には完全にブロックすることを選択し、その理由の一つとしてデベロッパーの混乱を挙げました。最近、Safari はオプトイン ベースのモデルに関心を示しました。
CHIPS がパーティション分割 Cookie の既存の実装と一線を画すのは、サードパーティのオプトインです。(パーティション分割されていない)サードパーティ Cookie が廃止されたら、クロスパーティ リクエストで送信するには、新しい属性を使用して Cookie を設定する必要があります。
サードパーティ Cookie も引き続き存在しますが、Partitioned
属性を使用することで、より制限が厳しく安全なタイプの Cookie 動作にオプトインできます。CHIPS は、サードパーティ Cookie のない未来にサービスがスムーズに移行できるようにするための重要なステップです。
Cookie パーティショニングの技術的な設計
現在、Cookie は、Cookie を設定したサイトのホスト名またはドメイン、つまりホストキーをキーとしています。
たとえば、https://support.chat.example
からの Cookie の場合、ホストキーは ("support.chat.example")
です。
CHIPS では、パーティショニングにオプトインする Cookie には、ホストキーとパーティション キーの 2 つのキーが付与されます。
Cookie のパーティション キーは、Cookie を設定したエンドポイントへのリクエストの開始時にブラウザがアクセスしていたトップレベル URL のサイト(スキームと登録可能なドメイン)です。
上記の例では、https://support.chat.example
が https://retail.example
に埋め込まれているため、トップレベル URL は https://retail.example
です。
この場合のパーティション キーは ("https", "retail.example")
です。
同様に、リクエストのパーティション キーは、リクエストの開始時にブラウザがアクセスしているトップレベル URL のサイトです。ブラウザは、その Cookie と同じパーティション キーを持つリクエストでのみ、Partitioned
属性を持つ Cookie を送信する必要があります。
上の例の Cookie キーは、CHIPS の適用前と適用後を示しています。
<ph type="x-smartling-placeholder">![サイト A と埋め込みサイト C は、パーティション分割された Cookie を共有しています。埋め込まれていない場合、サイト C はパーティション化された Cookie にアクセスできません。](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/site-and-embedded-site-b6ea4419a367f.png?authuser=7&hl=ja)
CHIPS 導入前
key=("support.chat.example")
CHIPS 適用後
key={("support.chat.example"),("https", "retail.example")}
セキュリティ設計
適切なセキュリティ慣行を促進するために、CHIPS では、Cookie は安全なプロトコルによってのみ設定、送信されます。
- パーティション化された Cookie は
Secure
で設定する必要があります。 - パーティション化された Cookie を設定する場合は、
__Host-
接頭辞を使用して、登録可能なドメインではなくホスト名にバインドすることをおすすめします。
例:
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
CHIPS の代替手段
Storage Access API と関連する関連ウェブサイト セット(RWS)は、ユーザー向けの特定の目的のために制限付きのクロスサイト Cookie アクセスを有効にするウェブ プラットフォームの仕組みです。
これらは、クロスサイトのパーティション分割されていないクックへのアクセスが必要な場合に、CHIPS パーティショニングの代わりになります。
複数の関連サイトに埋め込まれたサービスで同じ Cookie を使用する必要がある場合は、Storage Access API と関連ウェブサイト セットの使用を検討してください。
CHIPS は、複数のサイト間で独立したコンポーネントとして機能するサービス機能を提供します。この場合、同じ Cookie を複数のサイト間で使用する必要はありません。サービスがパーティション分割 Cookie を設定した場合、そのパーティション キーはトップレベル サイトになり、同じサービスを使用している他のサイトでその Cookie を使用することはできません。
関連ウェブサイト セットの設計は Storage Access API に依存しており、CHIPS パーティショニングは統合されていません。RWS 内のサイト間での Cookie パーティションの共有に依存するユースケースの場合は、GitHub の問題の例とフィードバックを提供してください。
デモ
このデモでは、パーティション化された Cookie の仕組みと、DevTools で Cookie を調べる方法について説明します。
サイト A には、サイト B の iframe が埋め込まれています。この iframe は、JavaScript を使用して 2 つの Cookie(パーティション分割された Cookie とパーティション分割されていない Cookie)を設定します。サイト B には、document.cookie
を使用してその場所からアクセスできるすべての Cookie が表示されます。
サードパーティ Cookie がブロックされている場合、サイト B は、クロスサイト コンテキストでのみ Partitioned
属性を持つ Cookie の設定とアクセスが許可されます。
サードパーティ Cookie が許可されている場合、サイト B もパーティション分割されていない Cookie を設定してアクセスできます。
<ph type="x-smartling-placeholder">![サイト A とサイト B](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/3p-cookies-blocked-and-not-blocked.png?authuser=7&hl=ja)
前提条件
- Chrome 118 以降。
chrome://flags/#test-third-party-cookie-phaseout
にアクセスして、この設定を有効にしてください
DevTools を使用してパーティション化された Cookie を調べる
- https://chips-site-a.glitch.me にアクセスします。
Control+Shift+J
(Mac の場合はCommand+Option+J
)を押して DevTools を開きます。- [アプリケーション] タブをクリックします。
- [アプリケーション] >ストレージ >Cookie。
- [
https://chips-site-b.glitch.me
] をクリックします。
選択した生成元のすべての Cookie が DevTools に表示されます。
<ph type="x-smartling-placeholder">![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/QcTVEgWjGYQZJtMX0g4a.png?authuser=7&hl=ja)
サイト B は、クロスサイト コンテキストでのみパーティション分割 Cookie を設定でき、パーティション分割されていない Cookie はブロックされます。
__Host-partitioned-cookie
に、トップレベル サイトhttps://chips-site-a.glitch.me
のパーティション キーが表示されているはずです。
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/DvSAMie7T41SFBY7wUrc.png?authuser=7&hl=ja)
- [サイト B に移動] をクリックします。
- DevTools で、[Application] >ストレージ >Cookie。
- [
https://chips-site-b.glitch.me
] をクリックします。
![サイト B](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/site-b.png?authuser=7&hl=ja)
このシナリオでは、トップレベルのコンテキストでサイト B にアクセスしているため、次のように両方の Cookie を設定してアクセスできます。
unpartitioned-cookie
に空のパーティション キーがあります。__Host-partitioned-cookie
Cookie にはパーティション キーhttps://chips-site-b.glitch.me
があります。
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/vl4ouXXVqQ1bB5dEP4iK.png?authuser=7&hl=ja)
サイト A に戻ると、unpartitioned-cookie
はブラウザに保存されていますが、サイト A からはアクセスできません。
- [サイト A に移動] をクリックします。
- [ネットワーク] タブをクリックします。
- [
https://chips-site-b.glitch.me
] をクリックします。 - [Cookie] タブをクリックします。
サイト A にアクセスしたときに、トップレベル サイト https://chips-site-a.glitch.me
のパーティション キーを含む __Host-partitioned-cookie
が表示されます。
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/223LlvPnqtMPoEjMASht.png?authuser=7&hl=ja)
[除外された Cookie リクエストを表示する] チェックボックスをオンにすると、パーティション分割されていない Cookie がブロックされていることが黄色でハイライト表示され、ツールチップ「この Cookie はユーザーの設定が原因でブロックされました」というツールチップが表示されます。
<ph type="x-smartling-placeholder">![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/a4jDguCgbwt9D5RB5Q6r.png?authuser=7&hl=ja)
[アプリケーション >ストレージ >https://chips-site-b.glitch.me
をクリックする Cookie
次のように表示されます。
unpartitioned-cookie
は、空のパーティション キーに置き換えます。- パーティション キー
https://chips-site-a.glitch.me
を持つ__Host-partitioned-cookie
Cookie。
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/tv3pAAoTktiX3nZdIUIh.png?authuser=7&hl=ja)
__Host-partitioned-cookie
Cookie にはパーティション キー https://chips-site-a.glitch.me
があります。unpartitioned-cookie
は表示されていますが、サイト A に埋め込まれたサイト B の iframe からはアクセスできません。Cookie を消去
デモをリセットするには、サイトの Cookie をすべて消去します。
Control+Shift+J
(Mac の場合はCommand+Option+J
)を押して DevTools を開きます。- [アプリケーション] タブをクリックします。
- [アプリケーション] >ストレージ >Cookie。
https://chips-site-b.glitch.me
を右クリックします。- [消去] をクリックします。
リソース
- GitHub: 解説の確認、質問の投稿、ディスカッションのフォローができます。
- デベロッパー サポート: プライバシー サンドボックス デベロッパー サポート リポジトリで、質問したり、ディスカッションに参加したりできます。