ストレージアクセス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新しいpromiseを設定する。

  2. もしdoc完全にアクティブでなければ、reject p "InvalidStateError" DOMException でrejectし、pを返す。

  3. もしdocorigin不透明originなら、resolve p をfalseで解決し、pを返す。

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

  5. もしglobalセキュアコンテキストでなければ、resolve p をfalseで解決し、pを返す。

  6. もしdocトップレベルorigin不透明originなら、resolve p をfalseで解決し、pを返す。

  7. browsingContextdocブラウジングコンテキストとする。

  8. topLevelSiteサイト取得の結果(docトップレベルoriginから)とする。

  9. embeddedSiteサイト取得の結果(docoriginから)とする。

  10. 次の手順を並列で実行:

    1. explicitSettingユーザーエージェントが非分割クッキーアクセスを明示的に許可するかどうか判定する結果((topLevelSite, embeddedSite))とする。

    2. permissionState現在の権限状態の取得の結果("storage-access", global)とする。

    3. グローバルタスクキューnetworkingタスクソースglobal指定)で:

      1. explicitSettingが"disallow"なら、resolve pをfalseで解決。

      2. explicitSettingが"allow"なら、resolve pをtrueで解決。

      3. アサートexplicitSettingは"none"。

      4. browsingContextトップレベルブラウジングコンテキストなら、resolve pをtrueで解決。

      5. browsingContextbrowsingContextトップレベルブラウジングコンテキストアクティブドキュメントと"same authority"なら、resolve pをtrueで解決。

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

      6. permissionStategrantedなら、resolve pglobalhas storage accessとする。

        注: ユーザー設定による権限の取り消しを即反映させるため、グローバルなストレージアクセス権限状態がローカルフラグより優先されます。

      7. resolve pをfalseで解決。

  11. pを返す。

Document docで呼び出されたとき、requestStorageAccess()メソッドは以下の手順を実施すること:

  1. p新しいpromiseを設定する。

  2. もしdoc完全にアクティブでなければ、reject p "InvalidStateError" DOMException でrejectし、pを返す。

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

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

  5. もしglobalセキュアコンテキストでなければ、reject p "NotAllowedError" DOMException でrejectし、pを返す。

  6. もしdoc"storage-access"の使用を許可されないなら、reject p "NotAllowedError" DOMException でrejectし、pを返す。

  7. もしdocorigin不透明originなら、reject p "NotAllowedError" DOMException でrejectし、pを返す。

  8. もしsettingsトップレベルorigin不透明originなら、reject p "NotAllowedError" DOMException でrejectし、pを返す。

  9. もしdocアクティブサンドボックスフラグセットsandbox storage access by user activation flagを持つなら、reject p "NotAllowedError" DOMException でrejectし、pを返す。

  10. browsingContextdocブラウジングコンテキストとする。

  11. topLevelOrigindocトップレベルorigin とする(関連設定オブジェクトの)

  12. topLevelSiteサイト取得の結果(topLevelOriginから)とする。

  13. embeddedOrigindocoriginとする。

  14. embeddedSiteサイト取得の結果(embeddedOriginから)とする。

  15. has transient activationdocWindow オブジェクトが一時的アクティベーションを有するかどうかで判定する。

  16. 以下の手順を並列で実行:

    1. process permission stateアルゴリズムを用意。permission state stateを与え、以下を実行:

      1. グローバルタスクキューnetworkingタスクソース(global指定)で:

        1. stategrantedなら:

          1. globalhas storage accessをtrueにする。

          2. resolve pundefined で解決。

        2. それ以外:

          1. ユーザーアクティベーションの消費globalで)。

          2. reject p "NotAllowedError" DOMException

    2. explicitSettingユーザーエージェントが非分割クッキーアクセスを明示的に許可するかどうか判定する結果((topLevelSite, embeddedSite))とする。

    3. explicitSettingが"disallow"の場合:

      1. process permission statedeniedで実行。

      2. これ以降中止。

    4. explicitSettingが"allow"の場合:

      1. process permission stategrantedで実行。

      2. これ以降中止。

    5. アサートexplicitSettingは"none"。

    6. browsingContextトップレベルブラウジングコンテキストの場合:

      1. process permission stategrantedで実行。

      2. これ以降中止。

    7. もしembeddedSite同一サイトtopLevelSiteと同じ場合:

      注: このチェックは意図的に同一サイトです。セキュリティ上の理由でストレージアクセスが制限されているシナリオで、エンドユーザーの関与なしに埋め込みサイトがrequestStorageAccess()でストレージアクセスを明示的に有効化できるようにします。

      1. process permission stategrantedで実行。

      2. これ以降中止。

    8. previous permission state現在の権限状態の取得の結果("storage-access", global)とする。

    9. もしprevious permission statepromptでなければ:

      1. process permission stateprevious permission stateで実行。

      2. これ以降中止。

    10. connected有効なFedCM接続状態判定の結果(topLevelOrigin, embeddedOrigin, doc)とする。

    11. もしconnected

      注: ユーザーエージェントは、FedCM接続によりストレージアクセスが許可された(サイト,サイト)タプルを管理し、cookieアクセス時にもチェックし、攻撃者による不正を防止することを推奨します。

      1. process permission stategrantedで実行。

      2. これ以降中止。

    12. もしhas transient activationがfalse:

      1. process permission statedeniedで実行。

      2. これ以降中止。

    13. permissionState権限リクエスト(" storage-access")の結果とする。

      注: 権限付与/プロンプト表示の際、ユーザーエージェント独自の実装定義挙動が働き、プロンプトなしで許可/拒否することがあります。

    14. process permission statepermissionStateで実行。

  17. pを返す。

注: このアルゴリズムの意図は、常にユーザーアクティベーションが必要な場合のみstorage-access権限を設定することです。ユーザーエージェントがヒューリスティックでアクティベーションなしで権限付与する実装も可能ですが、この仕様はそのような動作を強く非推奨とします。相互運用問題につながるためです。

source snapshot paramsのスナップショット時:

  1. has storage accesssourceDocumenthas storage accessに設定する。

  2. environment idsourceDocumentrelevant settings objectidに設定する。

create navigation params by fetchingアルゴリズムの手順3として、次を挿入:

  1. originalURLentryのURLとする。

requestreserved clientcreate navigation params by fetching内で作成する際:

  1. 以下すべてを満たすときは、sourceSnapshotParamshas storage accessreserved clienthas storage accessに設定する:

    1. sourceSnapshotParamsenvironment idnavigableactive documentrelevant settings objectid と等しい。

    2. originalURLorigincurrentURLorigin同一オリジンである。

    3. responseがnullまたはresponsehas-cross-origin-redirectsが false。

  2. それ以外の場合、requestreserved clienthas storage accessをfalseに設定する。

window environment settings objectのセットアップ時:

  1. settings objecthas storage accessreserved environmenthas storage accessに設定する。

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. もしkey1top-levelkey2同一サイトでなければfalseを返す。

  2. もしkey1requesterkey2同一サイトでなければ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を比較したり、トップレベルドキュメントと同一サイトチェックを行うかもしれません。