ストレージアクセスAPI

ドラフトコミュニティグループレポート、

このバージョン:
https://privacycg.github.io/storage-access/
課題の追跡:
GitHub
仕様内インライン
編集者:
(Mozilla)
(Google)
(Apple Inc.)
以前の編集者:
(Apple Inc.)
(Apple Inc.)

概要

ストレージアクセスAPIは、iframe内のコンテンツがウェブサイトのデータ(クッキーなど)へのアクセスを要求できるようにします。

この文書のステータス

この仕様はHTML Living Standardへの統合を意図しています。WHATWGのLiving Standardでもなく、W3Cの標準策定トラックにも載っていません。

この文書はPrivacy Community Groupによって公開されました。 W3Cコミュニティ寄稿者ライセンス契約(CLA)のもとで限定的なオプトアウトが認められるなどの条件が適用されます。 W3Cコミュニティおよびビジネスグループについて詳しくはこちらをご覧ください。

1. 導入

このセクションは規範的ではありません。

ユーザーエージェントは時々、特定の iframe 内のコンテンツがクッキーなどのクライアントサイドストレージメカニズムに保存されたデータへアクセスするのを防ぐことがあります。これにより、クライアントサイドストレージへのアクセスに依存している埋め込みコンテンツが動作しなくなる場合があります。

ストレージアクセスAPIは、 iframe 内のコンテンツが自分のクライアントサイドストレージへのアクセスを要求・許可されるようにし、ストレージへのアクセスに依存する埋め込みコンテンツがそのようなユーザーエージェント内でも動作できるようにします。[STORAGE-ACCESS-INTRO]

2. インフラストラクチャ

この仕様はInfra標準に依存します。[INFRA]

3. ストレージアクセスAPI

この仕様は、Document が現在非分割データにアクセスできるかどうかを問い合わせるメソッド(hasStorageAccess()) と、非分割データへのアクセスを要求するためのメソッド(requestStorageAccess()) を定義します。

Alexがhttps://social.example/を訪れます。このページはクッキーを設定します。このクッキーは ファーストパーティサイトコンテキスト で設定されました。

後で、Alexはhttps://video.example/を訪れます。そこには iframe があり、https://social.example/heart-buttonを読み込みます。この場合、 social.exampleDocument docサードパーティコンテキストとなり、以前に設定されたクッキーがdoc.cookie から見えるかどうかは、ユーザーエージェントのストレージアクセス方針によって決まります。

iframe 内のスクリプトは、doc.hasStorageAccess()を呼び出すことでクッキーへのアクセス可否を確認できます。もしアクセスできない場合は、doc.requestStorageAccess()を呼び出してアクセスを要求できます。

非分割データ とは、そのサイトファーストパーティサイトコンテキスト で読み込まれた場合に利用可能なクライアントサイドストレージです。

Document は、アクティブドキュメント であり、 トップレベル閲覧コンテキスト の場合はファーストパーティサイトコンテキストとなります。 そうでない場合、 origintop-level origin同一サイトであれば、 ファーストパーティサイトコンテキストとなります。

Documentファーストパーティサイトコンテキストでない場合、そのサードパーティコンテキストにあるとみなします。

ユーザーエージェントが非分割クッキーアクセスを明示的に許可するかどうか判定するには、タプル tuple (2つのサイトを含む)を与えられた場合、次の手順を実行します。このアルゴリズムは "none"、"allow"、"disallow" を返します。

注: ユーザーエージェントの設定は、サイトごとの許可リストやグローバル設定の変更、その他の独自オーバーライドなどにより、非分割クッキーアクセスの明示的な許可または禁止を行うことがあります。

  1. ユーザーエージェントがtupleに関して非分割クッキーアクセスに関する明示的な設定を持たない場合、"none" を返す。

  2. ユーザーエージェントの設定がtupleに対して非分割クッキーアクセスを明示的に許可している場合、"allow" を返す。

  3. アサート: ユーザーエージェントの設定がtupleに対して非分割クッキーアクセスを明示的に禁止している。

  4. "disallow" を返す。

FedCMサイトの接続状態を判定するには、 origin embedderorigin identityProvider を与えて次の手順を実行します。このアルゴリズムはbooleanを返します。

  1. すべての itemconnected accounts set) について:

    1. (rp, idp, account) を item とする。

    2. rpembedder同一サイト、かつ idpidentityProvider同一サイトのとき true を返す。

  2. false を返す。

有効なFedCM接続状態を判定するには、 origin embedderorigin identityProviderDocument doc を与えて次の手順を実行します。このアルゴリズムはbooleanを返します。

  1. policyStatus を、docが"identity-credentials-get"を 使用可能かどうかで定める。

  2. policyStatus が "Disabled" の場合は false を返す。

  3. connectedembedderidentityProviderサイト接続状態を判定した結果とする。

  4. connected が false の場合は false を返す。

  5. preventSilentAccessユーザーエージェントクレデンシャルストアにおける prevent silent access flagembedder に対するもの)とする。

  6. preventSilentAccess が立っている場合は false を返す。

  7. true を返す。

3.1. ストレージアクセスに関するユーザーエージェントの状態の変更

environment の定義を次のように変更します:

  1. has storage accessという新しいメンバー(型はboolean)を追加する。

source snapshot params の定義を次のように変更します:

  1. has storage accessという新しいメンバー(型はboolean)を追加する。

  2. environment idという新しいメンバー(型は不透明なstring)を追加する。

ストレージアクセス適格性は "unset"、"ineligible"、または"eligible"のいずれかです。

request にはストレージアクセス適格性 eligible for storage-accessがある。初期値は "unset"。

注: requestストレージアクセス適格性 は、どのクッキーをstorage-access権限を考慮して含めるべきかを評価する際に使われます。特に、requestStorageAccess が解決し、そのenvironmenthas storage accessがtrueになっても、その request のすべてが非分割クッキーを送るとは限りません。

例: ユーザーが https://top.com のページを訪れ、そこに https://embed.com からの iframe が埋め込まれ、iframe 内スクリプトが requestStorageAccess を呼んでpromiseが解決されたとします。そのiframeが続けて https://3p.com へリソースをfetchしても、そのリクエストはStorage Access API経由ではクッキーを含みません。

初期ストレージアクセス適格性を決定する には、request request を与え、次の手順を実行する:
  1. requestclientがnullなら "unset" を返す。

  2. requestclientancestry が"cross-site"でないなら "unset" を返す。

"ancestry" の概念は https://github.com/whatwg/html/pull/11133 でHTMLに追加中です。

  1. requestclienthas storage accessがfalseなら、 "ineligible" を返す。

  2. requestoriginが、requesturlorigin同一オリジンでないなら "ineligible" を返す。

  3. allowedShould request be allowed to use feature? を "storage-access" と request で実行した結果とする。

  4. allowed がfalseなら "ineligible" を返す。

  5. "eligible" を返す。

3.2. Documentの変更点

partial interface Document {
  Promise<boolean> hasStorageAccess();
  Promise<undefined> requestStorageAccess();
};
Document docで呼び出されたとき、hasStorageAccess()メソッドは以下の手順を実施すること:
  1. p新しいプロミスとする。

  2. doc完全にアクティブでないなら、p を "InvalidStateError" DOMException拒否し、 p を返す。

  3. docオリジン不透明なオリジンであるなら、p を false で解決し、 p を返す。

  4. globaldoc関連グローバルオブジェクトとする。

  5. globalセキュアコンテキストでないなら、p を false で解決し、 p を返す。

  6. doc関連設定オブジェクトトップレベルオリジン不透明なオリジンであるなら、p を false で解決し、 p を返す。

  7. browsingContextdoc閲覧コンテキストとする。

  8. topLevelSite を、doc関連設定オブジェクトトップレベルオリジンからサイトを取得する結果とする。

  9. embeddedSite を、docオリジンからサイトを取得する結果とする。

  10. 次のステップを並列に実行する:

    1. explicitSetting を、 (topLevelSite, embeddedSite) でユーザー エージェントがパーティション化されていない cookie アクセスを明示的に許可するかを決定する結果とする。

    2. permissionState を、"storage-access" と global が与えられた現在の許可 状態を取得する結果とする。

    3. global が与えられたネットワーキングタスクソース上に、 グローバルタスクをキューに入れる

      1. explicitSetting が "disallow" であるなら、p を false で解決し、これらのステップを中止する。

      2. explicitSetting が "allow" であるなら、p を true で解決し、これらのステップを中止する。

      3. 表明explicitSetting は "none" である。

      4. browsingContextトップレベル閲覧コンテキストであるなら、 p を true で解決し、これらのステップを中止する。

      5. browsingContextbrowsingContextトップレベル閲覧コンテキストアクティブ文書と same authority であるなら、 p を true で解決し、これらのステップを中止する。

        ここでの "same authority" は、ユーザーエージェントが、 クロスサイトの親文書の存在など追加のセキュリティ面を順守しながら同一サイトチェックを実行できるようにする将来の概念のプレースホルダーである。 whatwg/storage#142 を参照。 実際には、これはcookie 用のサイトを比較するか、トップレベル文書との同一サイトチェックを実行することを含む可能性がある。

      6. embeddedSitetopLevelSite同一サイトであるなら、 pglobalストレージアクセスを持つ解決し、これらのステップを中止する。

      7. permissionState許可済みであるなら、pglobalストレージアクセスを持つ解決し、これらのステップを中止する。

        注: ここでは、ユーザーが設定で許可を取り消す可能性がある選択を即時に反映するために、 グローバルなストレージアクセス許可状態が、ローカルのストレージアクセスを持つフラグより優先される。

      8. p を false で解決する。

  11. p を返す。

Document doc 上で呼び出されたとき、requestStorageAccess() メソッドは 次のステップを実行しなければならない:
  1. p新しいプロミスとする。

  2. doc完全にアクティブでないなら、p を "InvalidStateError" DOMException拒否し、 p を返す。

  3. globaldoc関連グローバルオブジェクトとする。

  4. settingsdoc関連設定オブジェクトとする。

  5. globalセキュアコンテキストでないなら、p を "NotAllowedError" DOMException拒否し、 p を返す。

  6. doc が "storage-access" の利用を許可されていないなら、p を "NotAllowedError" DOMException拒否し、p を返す。

  7. docオリジン不透明なオリジンであるなら、p を "NotAllowedError" DOMException拒否し、 p を返す。

  8. settingsトップレベルオリジン不透明なオリジンであるなら、p を "NotAllowedError" DOMException拒否し、 p を返す。

  9. docアクティブなサンドボックス化フラグ集合に、そのユーザー有効化によるサンドボックス ストレージアクセスフラグが設定されているなら、p を "NotAllowedError" DOMException拒否し、 p を返す。

  10. browsingContextdoc閲覧コンテキストとする。

  11. topLevelOrigin を、doc関連設定オブジェクトトップレベルオリジンとする。

  12. topLevelSite を、topLevelOrigin からサイトを取得する結果とする。

  13. embeddedOrigindocオリジンとする。

  14. embeddedSite を、embeddedOrigin からサイトを取得する結果とする。

  15. has transient activation を、docWindow オブジェクトが一時的有効化を持つかどうかとする。

  16. 次のステップを並列に実行する:

    1. process permission state を、許可状態 state が与えられたとき、 次のステップを実行するアルゴリズムとする:

      1. global が与えられたネットワーキングタスクソース上に、 グローバルタスクをキューに入れる

        1. state許可済みであるなら:

          1. globalストレージ アクセスを持つを true に設定する。

          2. pundefined解決する。

        2. そうでなければ:

          1. global が与えられたユーザー 有効化を消費する

          2. p を "NotAllowedError" DOMException拒否する。

    2. explicitSetting を、 (topLevelSite, embeddedSite) でユーザー エージェントがパーティション化されていない cookie アクセスを明示的に許可するかを決定する結果とする。

    3. explicitSetting が "disallow" であるなら:

      1. process permission state拒否済みで実行する。

      2. これらのステップを中止する。

    4. explicitSetting が "allow" であるなら:

      1. process permission state許可済みで実行する。

      2. これらのステップを中止する。

    5. 表明explicitSetting は "none" である。

    6. browsingContextトップレベル閲覧コンテキストであるなら:

      1. process permission state許可済みで実行する。

      2. これらのステップを中止する。

    7. embeddedSitetopLevelSite同一サイトであるなら:

      注: このチェックは意図的に同一サイトであり、ストレージアクセスがプライバシー目的ではなく セキュリティ目的で制限されているシナリオにおいて、埋め込みサイトがエンドユーザーの関与なしに requestStorageAccess() を用いてストレージアクセスをオプトインできるようにするためである。

      1. process permission state許可済みで実行する。

      2. これらのステップを中止する。

    8. previous permission state を、"storage-access" と global が与えられた現在の 許可状態を取得する結果とする。

    9. previous permission stateプロンプトでないなら:

      1. process permission stateprevious permission state で実行する。

      2. これらのステップを中止する。

    10. connected を、topLevelOriginembeddedOrigindoc が与えられた有効な FedCM 接続状態を決定する結果とする。

    11. connected なら:

      注: ユーザーエージェントには、 既存の FedCM 接続によってストレージへのアクセスを許可された (site, site) タプルを追跡し、 cookie にアクセスするときにそのリストを二重確認して、不正な攻撃者が環境をだまして誤ったストレージアクセスを持つビットを使用させた場合を捕捉することが推奨される。

      1. process permission state許可済みで実行する。

      2. これらのステップを中止する。

    12. has transient activation が false であるなら:

      1. process permission state拒否済みで実行する。

      2. これらのステップを中止する。

    13. permissionState を、"storage-access" の利用許可を要求する結果とする。

      注: 許可を要求し、 プロンプトを表示するかどうかを決定するとき、ユーザーエージェントはエンドユーザー体験を形作るために 実装定義の動作を適用することに注意。特に storage-access については、ユーザーエージェントが、プロンプトを表示せずに許可を 与える、または拒否するカスタム規則を適用することが知られている。

    14. process permission statepermissionState で実行する。

  17. p を返す。

注: このアルゴリズムの意図は、storage-access 許可が設定される前に常にユーザー有効化を要求することである。ユーザーエージェントが、事前のユーザー有効化なしに カスタムヒューリスティックに基づいて storage-access 許可を設定することは可能であるが、 この仕様は、そのような振る舞いが相互運用性の問題につながりうるため、強く推奨しない。

ソーススナップショットパラメータをスナップショット取得するとき:

  1. ストレージアクセスを持つsourceDocumentストレージアクセスを持つに設定する。

  2. 環境 IDsourceDocument関連設定オブジェクトIDに設定する。

フェッチによってナビゲーションパラメータを作成するアルゴリズムに、 次のステップをステップ 3 として挿入する:

  1. originalURLentry の URL とする。

フェッチによってナビゲーションパラメータを作成するにおいて、 request予約済みクライアントを作成するとき:

  1. 次のすべてが成り立つなら、予約済みクライアントストレージ アクセスを持つsourceSnapshotParamsストレージアクセスを持つに設定する:

    1. sourceSnapshotParams環境 IDnavigableアクティブ文書関連設定オブジェクトIDに等しい。

    2. originalURLオリジンが、currentURLオリジン同一オリジンである。

    3. response が null であるか、responsehas-cross-origin-redirectsが false である。

  2. そうでなければ、request予約済みクライアントストレージ アクセスを持つを false に設定する。

ウィンドウ環境設定 オブジェクトを設定するとき:

  1. settings objectストレージアクセスを持つを、reserved environmentストレージアクセスを持つに設定する。

3.4. Fetchとの統合

3.4.1. 取得(Fetching)

fetch の手順14の後に新しいステップを挿入:

  1. requesteligible for storage-accessを、 初期ストレージアクセス適格性の決定結果(request) に設定する。

3.4.2. HTTP-リダイレクト取得

HTTP-redirect fetch の手順17の後に新しいステップを挿入:

  1. もしrequesteligible for storage-accessが "unset" でなく、かつlocationURLoriginrequestcurrent URLorigin同一オリジンでなければ、 requesteligible for storage-access を"ineligible"に設定する。

3.5. さまざまなクライアントサイドストレージメカニズムの変更

このAPIはHTTPクッキーのみに影響します。将来のリビジョンで他のクライアントサイドステートにも影響する可能性があります。[RFC6265]

3.5.1. クッキー

このAPIは、サードパーティコンテキストで非分割クッキーへのアクセスをブロックする環境およびユーザーエージェント構成との併用を意図しています。執筆時点では、この概念はまだHTTP-network-or-cache fetchcookie アルゴリズムに統合されていません。そのような統合のためには、cookie store に、リクエストのトップレベルおよび埋め込みサイト(クロスサイト・分割・非添付クッキーの判断用)と、そのリクエストがstorage accessを持つドキュメントのためになされたかどうか(本仕様で定義されたeligible for storage-access を参照)、の情報が渡るようにする必要があります。

cookie storeがストレージアクセス情報の受け取りに対応したら、HTTP-network-or-cache fetchcookie も、クッキー取得時にrequesteligible for storage-accesscookie store に渡すよう更新されます。

ストレージアクセスのあるcookie storeから非分割クッキーを取得する際、ユーザーエージェントは引き続きSameSite制約(サードパーティコンテキストSameSite=StrictSameSite=Laxを添付しないなど)に従います。

注: ユーザーエージェントによってはSameSiteクッキー属性のデフォルト値が違う場合があります。そのため、SameSite=NoneがデフォルトのユーザーエージェントではSameSite属性のない非分割クッキーがリクエストに添付される場合がありますが、SameSite=Laxがデフォルトのユーザーエージェントでは添付されません。Web開発者はクッキーにSameSite属性を設定することを推奨します。

3.6. ストレージアクセスのサンドボックス化

sandboxing flag setにはsandbox storage access by user activation flagがあります。このフラグはコンテンツがストレージアクセスを要求するのを防止します。

sandboxingディレクティブのパースアルゴリズムの手順3の下に以下を追加:

4. 権限統合

Storage Access APIは powerful feature として name "storage-access" で識別されます。次の権限関連アルゴリズムを定義します:

permission query algorithm
"storage-access"権限のクエリは、PermissionDescriptor permissionDescPermissionStatus statusに対して:
  1. statusstatepermissionDescpermission stateに設定する。

  2. もしstatusstatedeniedなら、statusstatepromptに設定する。

    注: "denied" 権限状態はユーザーの決定を開発者にさらさないために公開されません。これは、ユーザーへの報復やユーザー体験悪化につながる繰り返しプロンプトの防止のためです。

permission key type
"storage-access" のpermission keyは、タプルsite top-levelと、site requester)です。

(("https", "news.example"), ("https", "social.example")) は、"storage-access"のpermission keyであり top-level("https", "news.example")requester("https", "social.example") です。

permission key generation algorithm
"storage-access" のpermission key生成は、origin originorigin embeddedOriginを与え:
  1. topLevelSiteobtain a siteoriginから取得。

  2. embeddedSiteobtain a siteembeddedOriginから取得。

  3. (topLevelSite, embeddedSite)を返す。

permission key comparison algorithm
"storage-access"用のpermission key key1key2 を比較するには:
  1. key1トップレベルが、key2トップレベル同一サイトでないなら、false を返す。

  2. key1リクエスターが、key2リクエスター同一サイトでないなら、false を返す。

  3. true を返す。

5. 権限ポリシー統合

Storage Access APIは policy-controlled feature として"storage-access"という文字列で識別されます。そのデフォルト許可リスト"*"です。

注: Document権限ポリシーは、そのドキュメント内のコンテンツがrequestStorageAccess() でストレージアクセスを要求できるかどうかを決定します。どれかのドキュメントで無効なら、そのドキュメントでrequestStorageAccess() を呼ぶとrejectされます。

6. プライバシーに関する考慮事項

Storage Access APIによってクロスサイトクッキーを削除できるようになります。特に、認証埋め込みのユースケースが動作し続けます。したがって、APIは開発者が制約下ながらクロスサイトクッキーへの再アクセスを可能にします。

入れ子になったDocument は、active documentトップレベル閲覧コンテキストのときに持つのと同じクッキーに、requestStorageAccess() を呼び、そのpromiseが解決されたときアクセスできます。これらクッキーでサーバーに認証したりユーザー固有情報を取得できます。

この機能には第三者によるトラッキングの悪用リスクがありますが、API設計の目的はクロスサイトクッキー廃止の効果を損なわせないことであり、プラットフォーム固有情報に依存せず、追加される状態は埋め込み/埋め込まれサイトsite間の権限だけで、廃止前環境以下にはプライバシー性が劣化しません。

デフォルトでクロスサイトクッキーがすでに廃止されている場合はより困難です。Storage Access APIでクッキーなし(または分割クッキー)の入れ子Document を廃止前状態に戻し、非分割データ にアクセスさせる際の許可タイミング・方法の課題が生じます。

理想的には、入れ子Document非分割データにアクセスできるのは:

  1. ユーザーがその入れ子Document を操作した場合

  2. 入れ子Document が埋め込み元によってAPI使用を許可された場合

  3. 入れ子Documentセキュアコンテキストである場合

  4. ユーザーがペアごと明示的に埋め込まれ側のクッキー利用権限を埋め込み元に付与した場合

  5. 「storage-access」許可のリクエストにユーザーが過剰にさらされず、その明示許可が疲労により実質無効にならない場合

この仕様は最初の3点だけ実装者に必須とします。これでユーザーが入れ子Document 内容を把握し、埋め込み元は認証を拒否していないことと、クロスサイトクッキーがネットワーク攻撃者に漏れないことを保証します。

最後の2点はトレードオフです。理想的にはrequestStorageAccess() 毎回プロンプトを表示するのが理想ですが、それだとページが頻繁にプロンプトでき5番目の要件が形骸化してしまいます。ユーザーエージェントは過剰なプロンプトを防ぐべきです。

A modal dialog box which states 'Do you want to allow “video.example” to use cookies and website data while browsing “news.example”? This will allow “video.example” to track your activity.' and which has two buttons, “Don’t Allow” and “Allow”.
サイトがdocument.requestStorageAccess() を呼んだ際にユーザーに表示されるプロンプト例。

このため、最後の2点は妥協点です。他要件を満たす限りはユーザー選択なしに非分割データ許可/拒否タイミングの 実装依存を許容します。この妥協は提案のプライバシー保障(特に4点目)を一部実装依存で弱めますが、5点目実現には必要でした。

ユーザーエージェント間で実装依存の差異が大きいと開発者体験が損なわれるため、ユーザーエージェントはサイレント許可・拒否の標準化や縮小を目指すべきです。

6.1. 権限の範囲

API設計におけるもう一つの緊張点は、「storage-access」権限のキーとしてオリジンサイトのどちらを使うべきかということです。私たちはサイトを選びました。なぜなら、これによってプライバシーの境界を適切に保ちながら、既存の同一サイトや、同一ページ内のクロスオリジン入れ子Document でも、ユーザーによるプロンプトが1回で済むからです。

7. セキュリティに関する考慮事項

この仕様は、クロスサイトクッキー廃止後と比べてもウェブプラットフォームのセキュリティ特性が低下しないようにすることが重要です。サードパーティクッキーの廃止は、特に認証済みリクエストに依存する攻撃(例:CSRF)対策においてセキュリティ上有益な可能性があります。Storage Access APIがそのような攻撃を利用する足掛かりとなることは望んでいません。

このため、「storage-access」権限付与の効果は、非分割データ へのアクセスが、そのDocumentrequestStorageAccess() を呼び出した時点と、入れ子Documentオリジン境界をナビゲートするまでの期間のみに限定されます。これにより、オリジンがページでrequestStorageAccess() を呼び出す場合のみ認証付きリクエストが送信されること、また埋め込みページ側はContent Security Policyの「frame-ancestors」ディレクティブを利用して許可する埋め込み元を制御できることになります。これにより、埋め込み側のセキュリティ目的のオリジン単位制御が維持されます。

7.1. 風評攻撃

この設計は、埋め込み側の風評被害を防ぐもう一つの攻撃にも有効です。ユーザーがよりプライバシーを意識する中、クロスサイト認証付きリクエストは評判上のリスクをともないます。したがって、ファーストパーティまたは兄弟クロスサイトがユーザー認証クッキー付きでリソースを埋め込みリクエストさせるのは、クロスサイト所有者への攻撃として見なされます。またこれが、本APIがセキュアコンテキストでなければならない理由でもあります。これによりネットワーク上の攻撃者が埋め込みページにAPIを使わせることができなくなります。

埋め込み元は、どの入れ子Document が認証可能になったり、ユーザーへの権限要求表示(Permission PolicyやDocument のサンドボックス等)を許すか、コントロールできます。

7.2. 通知の乱用

通知の乱用についてもStorage Access APIの仕様策定時に考慮されました。具体的には、ユーザー操作が入れ子Document で必要であり、拒否時にはその拒否を消費して許可プロンプトの表示条件を制限します。これにより、ユーザーが拒否した直後に再び許可を求めてくるような攻撃を緩和できます。

8. 自動化

ユーザーエージェントの自動化やアプリケーションテストの目的のために、この文書は拡張コマンド[WebDriver]仕様に定義します。

8.1. ストレージアクセスの設定

HTTPメソッド URIテンプレート
POST /session/{session id}/storageaccess

Set Storage Access 拡張コマンドは、現在のブラウジングコンテキストのストレージアクセス方針を変更します。

リモートエンド手順は:

  1. blockedparametersからblockedプロパティ取得した結果にする。

  2. もしblockedbooleanでなければ、WebDriverエラーWebDriver error code invalid argument)を返す。

  3. embedded originparametersからoriginプロパティ取得した結果にする。

  4. もしembedded originがU+002A ASTERISK(*)1文字でなければ:

    1. parsedURLembedded originに対しURLパーサを実行した結果とする。

    2. もしparsedURLが失敗なら、WebDriverエラーWebDriver error code invalid argument)を返す。

    3. embedded originparsedURLオリジンに設定する。

  5. もし現在のブラウジングコンテキストトップレベル閲覧コンテキストでなければ、WebDriverエラーWebDriver error code unsupported operation)を返す。

  6. doc現在のブラウジングコンテキストactive documentとする。

  7. settingsdocrelevant settings objectとする。

  8. top-level sitesettingsオリジンからサイト取得した結果とする。

  9. もしembedded originがU+002A ASTERISK(*)1文字の場合:

    1. もしblockedtrueなら:

      1. 実装依存手順により、任意のサイトが、そのtop-level siteサードパーティコンテキスト で読み込まれるときに非分割データにアクセスできなくすること。

    2. 一方、blockedfalseなら:

      1. 実装依存手順により、 任意のサイトが、そのtop-level siteサードパーティコンテキスト で読み込まれるときに非分割データにアクセスできるようにすること。

  10. それ以外の場合:

    1. もしembedded originsettingsオリジン同一サイトなら、WebDriverエラーWebDriver error code unsupported operation)を返す。

    2. もしblockedtrueなら:

      1. 実装依存手順により、 top-level siteサードパーティコンテキストembedded origin非分割データにアクセスできなくすること。

    3. 一方、blockedfalseなら:

      1. 実装依存手順により、 top-level siteサードパーティコンテキストembedded origin非分割データにアクセスできるようにすること。

  11. 上記実装依存手順で失敗した場合は、WebDriverエラーWebDriver error code unknown error)を返す。

  12. successnullデータで返す。

謝辞

本仕様は、Storage Access APIを発明したJohn Wilander氏、初期テキストの多くを執筆したTheresa O’Connor氏という前任編集者の基盤に基づいています。彼らのアイデアと貢献に心から感謝します。

また以下の方々に多大なる感謝を表します。 Anne van Kesteren、 Ben Kelly、 Brad Girardeau、 Brad Hill、 Brady Eidson、 Brandon Maslen、 Chris Mills、 Dave Longley、 Domenic Denicola、 Ehsan Akhgari、 Geoffrey Garen、 Jack Frankland、 James Coleman、 James Hartig、 Jeffrey Yasskin、 Kushal Dave、 Luís Rudge、 Maciej Stachowiak、 Matias Woloski、 Mike O’Neill、 Mike West、 Pete Snyder、 Rob Stone、 Stefan Leyhane、 Steven Englehardt、 Travis Leithead、 Yan Zhu、 Zach Edwards、 およびwhatwg/html#3338, privacycg/proposals#2, privacycg/storage-access/issues で本提案にコメントいただいた全ての皆様。

WebKit Open Source Projectに、Storage Access APIプロンプト画像(元はwebkit.orgで公開)の使用を許可いただき感謝します。

適合性

文書規約

適合要件は、記述的な表明とRFC 2119の用語の組み合わせで示されています。 この文書の規範的部分において、 “MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”、“OPTIONAL” というキーワードは RFC 2119に記載された通りに解釈されます。 ただし、可読性のため、この仕様ではこれらの単語をすべて大文字で表記していません。

この仕様の本文は、明示的に非規範的と示されたセクション、例、および注記を除き、すべて規範的です。[RFC2119]

この仕様書の例は、「例えば」で始まるか、 またはclass="example"で規範テキストと区別されて示されます。

これは説明的な例です。

情報的注記は「注」で始まり、 class="note"によって規範テキストと区別して示されます。

注:これは情報的な注記です。

索引

本仕様で定義されている用語

参考文献で定義されている用語

参考文献

規範的参考文献

[CREDENTIAL-MANAGEMENT-1]
Nina Satragno; Marcos Caceres. Credential Management Level 1. URL: https://w3c.github.io/webappsec-credential-management/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[FEDCM-1]
Nicolas Pena Moreno. Federated Credential Management API. URL: https://w3c-fedid.github.io/FedCM/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS]
Marcos Caceres; Mike Taylor. Permissions. URL: https://w3c.github.io/permissions/
[PERMISSIONS-POLICY-1]
Ian Clelland. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC6265]
A. Barth. HTTP State Management Mechanism. April 2011. Proposed Standard. URL: https://httpwg.org/specs/rfc6265.html
[RFC6265BIS]
Cookies: HTTP State Management Mechanism. Editor's Draft. URL: https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis
[URL]
Anne van Kesteren. URL Standard. Living Standard. URL: https://url.spec.whatwg.org/
[WebDriver]
Simon Stewart; David Burns. WebDriver. URL: https://w3c.github.io/webdriver/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考情報資料

[STORAGE-ACCESS-INTRO]
John Wilander. Introducing Storage Access API. 2018年2月. Blog post. URL: https://webkit.org/blog/8124/introducing-storage-access-api/

IDLインデックス

partial interface Document {
  Promise<boolean> hasStorageAccess();
  Promise<undefined> requestStorageAccess();
};

課題インデックス

"ancestry"の概念は https://github.com/whatwg/html/pull/11133 でHTMLに追加中です
"same authority"は今後の概念のプレースホルダーで、ユーザーエージェントが同一サイトチェックを追加のセキュリティ観点とともに実行可能にするものです。詳細はwhatwg/storage#142参照。実際はsite for cookiesを比較したり、トップレベルドキュメントと同一サイトチェックを行うかもしれません。