ストレージ パーティション

特定の種類のサイドチャネル クロスサイト トラッキングを防止するために、Chrome はサードパーティのコンテキストでストレージと通信の API をパーティション化します。

公開日

翻訳先言語: English

ストレージ パーティションとは

特定の種類のサイドチャネル クロスサイト トラッキングを防止するために、Chrome はストレージと通信の API をサードパーティのコンテキストでパーティション化しています。ストレージ パーティションがない場合、サイトは異なるサイト間でデータを結合して、ウェブ全体でユーザーを追跡できます。また、埋め込みサイトは、タイミング攻撃XS-LeaksCOSI などのサイドチャネル手法を使用して、トップレベル サイトのユーザーに関する特定の状態を推測できます。

これまで、ストレージはオリジンによってのみキー化されてきました。これは、example.com の iframe が a.comb.com に埋め込まれている場合、それが ID を保存してストレージから正しく取得することで、これら 2 つのトップレベル サイトのブラウジング習慣を学習できる可能性があることを意味します。サードパーティのストレージ パーティションを有効にすると、example.com のストレージは、a.com 用と b.com 用の 2 つの異なるパーティションに存在することになります。パーティション化すれば通常は、ローカルストレージや IndexedDB などのストレージ API によって保存されるデータは、同一オリジンのあらゆるコンテキストにもアクセスできなくなり、データは同一オリジンと同一トップレベルサイトのコンテキストにのみアクセス可能となります。

パーティション ストレージ有効前

パーティションなしのストレージ API の図。

パーティション ストレージ後

パーティションによるストレージ API の図。

機能のリリースは、安定性と互換性に応じて、2023 年早期に予定されています。オリジントライアルでサードパーティのストレージ パーティションをテストし、バグを報告することで、潜在的な問題を発見し、一般公開のロールアウト前に解決することができます。

Chrome ベータ版 105.0.5195.17 以降では、ストレージ パーティションをテストできます。

ストレージ パーティションのテスト方法

以下の手順に従ってお試しください。

  1. Chrome Canary バージョン 105 以降を使用します。
  2. chrome://flags/#third-party-storage-partitioning にアクセスします。
  3. 「Experimental Third-party Storage Partitioning」フラグを有効にします。

初期のテストに参加して、安定版のリリース前に Chrome チームが予期しない動作を特定して修正できるようにバグを報告してください。Blob URL と Clear-Site-Data ヘッダー API は開発中であり、まだテストには使用できません。

更新された API

ストレージ API

クォータ システム
クォータ システムは、ストレージに割り当てられるディスク容量を決定するために使用されます。各パーティションはクォータ システムによって個別のバケットとして管理され、許可される容量と、クリアされる時期が決定されます。
navigator.storage.estimate() はパーティションの情報を返します。window.webkitStorageInfonavigator.webkitTemporaryStorage などの Chrome 専用 API は使用廃止になります。
IndexedDBキャッシュ ストレージは、新しいパーティション クォータ システムを使用します。
Web Storage API
Web Storage API は、ブラウザがキーと値のペアを保存できる Local StorageSession Storage の 2 つの仕組みを提供します。これらは現在クォータで管理されていませんが、引き続きパーティション化されます。
Origin Private File System
File System Access APIを使用すると、ユーザーがアクセスを許可した後、サイトはデバイス上のファイルやフォルダの変更を直接読み取ったり保存したりできます。Origin Private File System を使用すると、オリジンは、ユーザーが簡単にアクセスできるディスクに非公開コンテンツを保存でき、パーティション化されます。
Storage Bucket API
Storage Bucket API は、バケットと呼ばれる新しい概念を使用して、IndexedDB や localStorage などのさまざまなストレージ API を統合する Storage Standard 用に開発されています。バケットに格納されたデータとバケットに関連付けられたメタデータはパーティションされます。
Clear-Site-Data ヘッダー
応答に Clear-Site-Data ヘッダーを含めると、サーバーはユーザーのブラウザに保存されているデータを消去するように要求できます。キャッシュ、Cookie、および DOM ストレージをクリアできます。ヘッダーを使用すると、1 つのパーティション内のストレージのみがクリアされます。
Blob URL ストア
blob は、処理される生データを含むオブジェクトであり、リソースにアクセスするために blob URL を生成できます。トップレベル コンテキストで任意の Blob URL に移動するユースケースをサポートするために(ディスカッション)、Blob URL ストアはトップレベル サイトではなくエージェント クラスターによってパーティションされます。この機能はまだテストできません。また、パーティションの仕組みが今後変更される可能性があります。

通信 API

ストレージ API とともに、1 つのコンテキストがオリジンの境界を越えて通信できるようにする通信 API もパーティションされます。この変更は主に、ブロードキャストまたは同一オリジン ランデブーを介して他のコンテキストを検出できるようにする API に影響します。

以下の通信 API については、サードパーティの iframe は同一オリジン コンテキストと通信できなくなります。

Broadcast Channel
Broadcast Channel API を使用すると、ブラウジング コンテキスト(ウィンドウ、タブ、または iframe)と同じオリジンのワーカー間の通信が可能になります。
コンテキスト間の関係が明確に定義されているクロスサイト iframe の postMessage() は、変更が提案されていません。
SharedWorker
SharedWorker API は、同一オリジンのブラウジング コンテキスト間でアクセスできるワーカーを提供します。
Web Locks
Web Locks API を使用すると、同一オリジンの 1 つのタブまたはワーカーで実行されているコードが、何らかの作業の実行中に共有リソースのロックを取得できます。

Service Worker API

Service Worker APIは、バックグラウンドでタスクを実行するためのインターフェースを提供します。サイトがイベントに応答するための新しいワーカー コンテキストを作成する永続的な登録を作成すると、そのワーカーは任意の同一オリジン コンテキストと通信できるようになります。また、ServiceWorker API はナビゲーション リクエストのタイミングを変更できるため、履歴スニッフィングなどのクロスサイト情報漏えいの可能性につながる可能性があります。したがって、サードパーティのコンテキストから登録される Service Worker はパーティションされます。

拡張 API

拡張機能は、ユーザーのブラウジング エクスペリエンスをカスタマイズするプログラムです。Manifest V2 では、拡張機能は拡張機能のオリジンを持つバックグラウンド ページを作成できますが、ウェブコンテンツのオリジンを持つ iframe を埋め込むことができます。ストレージをパーティションすると一部のユース ケースが無効になるため、緩和策が提供される予定です。拡張機能に iframe オリジンの host_permissions がある場合、iframe は拡張機能ページではなくトップレベル フレームとして扱われます。

Manifest V2 は使用廃止となっており、削除されることに注意してください。Manifest V3 に移行することをお勧めします。

エンゲージメントとフィードバックの共有

共有ストレージの提案は現在も検討中であるため、今後変更される可能性があります。 この API を試して、フィードバックがある場合は、ぜひお聞かせください。

最終更新日: 記事を改善する

We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.