サイトデータをクリア

W3C作業草案,

このバージョン:
https://www.w3.org/TR/2017/WD-clear-site-data-20171130/
最新公表版:
https://www.w3.org/TR/clear-site-data/
編集者草案:
https://w3c.github.io/webappsec-clear-site-data/
以前のバージョン:
バージョン履歴:
https://github.com/w3c/webappsec-clear-site-data/commits/master/index.src.html
フィードバック:
public-webappsec@w3.org 件名 “[clear-site-data] … message topic …” で (アーカイブ)
編集者:
(Google株式会社)
参加:
課題を登録 (オープン課題)

要約

本書は、ウェブ開発者がユーザーエージェントにホスト関連のサイトのローカル保存データをクリアするよう指示できる命令的な仕組みを定義します。

この文書のステータス

このセクションは発行時点の文書のステータスを説明します。他の文書が本書に取って代わる可能性があります。現在のW3C刊行物および本技術レポートの最新版は W3C技術レポート一覧 https://www.w3.org/TR/ からご覧いただけます。

この文書は Web Application Security Working Group によりワーキングドラフトとして発行されました。 本文書はW3C勧告になることを意図しています。

(アーカイブ)された公開メーリングリスト public-webappsec@w3.org説明参照) は本仕様の議論に推奨される場です。 電子メールを送信する際は、件名に “clear-site-data” を含めてください。推奨形式は “[clear-site-data] …コメント要約…” です。

ワーキングドラフトとしての公開はW3C会員による承認を意味しません。これは草案文書であり、随時更新・差し替え・廃止される場合があります。進行中の作業以外として本書を引用するのは適切ではありません。

本文書は Web Application Security Working Group により作成されました。

本文書は 2004年2月5日 W3C特許ポリシーの下で運営されるグループにより作成されました。W3Cは、グループの成果物に関連してなされた特許公開の公開リストを維持しています。 そのページには特許公開の方法に関する説明も含まれています。 特許の本質的な請求項を含むことを知っている者は特許ポリシー第6節に従って情報を公開する必要があります。

本文書は 2017年3月1日 W3Cプロセス文書 により管理されています。

1. イントロダクション

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

ウェブアプリケーションは、ユーザーのコンピュータにデータをローカル保存して、ユーザーがオフライン中も機能を提供し、オンライン中のパフォーマンスも向上させます。これらのローカルキャッシュは、ユーザーと開発者の双方に大きな利点をもたらしますが、リスクも存在します。

ユーザーのデータは機微かつ価値あるものです。ウェブ開発者はそれを保護するために合理的な手段を講じるべきです。その一つは保存前にデータを暗号化すること、また別の一つは不要になったデータをユーザーのマシンから削除することです(たとえばアプリからサインアウトしたときやアカウントを削除したとき)。

サイトの作者はJavaScriptで多数のストレージ機構からデータを削除できますが、確実な対応が困難なものもあります。例えばクッキーは、JavaScriptのdocument.cookieアクセスで一部をクリアできますが、HttpOnlyクッキーはHTTPレスポンス内の複数のSet-Cookieヘッダを使った場合のみクリア可能です。全ホストのクッキーを知っている必要があり、これは複雑です。キャッシュはさらに困難で、ブラウザのネットワークキャッシュに命令的にアクセスする手段はそもそもありません。

本書は、これらや他のローカルストレージからデータを削除するための新たな仕組みを定義し、ウェブ開発者がClear-Site-Data HTTPレスポンスヘッダを通じて、ユーザーのローカルデータキャッシュをクリアできるようにします。

1.1.

1.1.1. サインアウト

ユーザーはCSRF対策POSTでhttps://supersecretsocialnetwork.example.com/logoutからSuper Secret Social Networkをサインアウトし、 サイト作者はローカル保存データが削除されることを望んでいます。

そのために、レスポンスに次のHTTPヘッダを送信できます:

Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"

1.1.2. ターゲットを絞ったクリア

ユーザーは Megacorp Inc. のサイトでCSRF対策POSTでhttps://megacorp.example.com/logoutからサインアウトします。Megacorpは多数のサービスがサブドメインで存在し、どれをログアウト時にクリアして安全か一概に判別できません。一案は全てクリアし、問題はその後で処理することですが、CEOは「Irate Ibexes」での長時間の進捗が誤消去で失われた経験から全消去を拒否しています。

しかし開発者は「Minus」アプリケーションだけは安全であると把握しているため、ログアウト時ランディングページでこのサブドメインに対しCORS対応・CSRF対策POSTをリクエストとして組み込むことで個別にクリアできます:

fetch("https://minus.megacorp.example.com/clear-site-data",
      {
          method: "POST",
          mode: "cors",
          headers: new Headers({
              "CSRF": "[insert sekrit token here]"
          })
      });

そのエンドポイントはプリフライトには正しいCORSヘッダを返し、本リクエストには次のヘッダを返してください:

Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"

1.1.3. 重要なCookieを保持

ユーザーは https://ads-are-awesome.example.com/optout にCSRF対策POSTで興味関心広告からオプトアウトします。サイト作者はトラッキング情報を含む可能性のある DOM アクセス可能データを削除しますが、行ったばかりのオプトアウトクッキーが一緒に消えるのは避けたい。

そのためには "cookies" を除き、他すべての型を含めて次のHTTPヘッダを送信します:

Clear-Site-Data: "cache", "storage", "executionContexts"

1.1.4. キルスイッチ

Super Secret Social Network の開発者は、サイトがクロスサイトスクリプティング攻撃に脆弱で、その結果悪意ある者が任意コードをオリジンに注入できる状態だったことを知ります。サイトは修正され、リスク低減のため強い Content Security Policy [CSP] も適用されましたが、クライアントが本当に元通り信頼できる状態になったか確信は持てません。攻撃者が巧妙な永続化機構を使ったかもしれません。

このような永続化クライアントサイドXSSのリスクを下げるため、ローカルのデータソースを消し去る次のHTTPヘッダをレスポンスで送信できます:

Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"

注: Service Worker を導入すると、リクエストは約24時間ごとに必ずサーバへ送られます。更新時のping時に、このようなヘッダを障害時用に送信するとよいでしょう。 [SERVICE-WORKERS]

1.2. 目的

一般的には、ウェブ開発者が各オリジンのユーザーエージェントによるローカルデータ保存について、よりコントロールしやすくすることを目的としています。特に開発者は、下記のことを信頼性高く実現できるべきです:

  1. [INDEXEDDB]・WebSQL・Filesystem・localStoragesessionStorage のようなオリジンのクライアントサイドストレージ機構内のデータがクリアされること。

  2. オリジンのホストに設定されたクッキーが削除されること [RFC6265]

  3. オリジンのWeb Worker(専用・共有)が終了されること。

  4. オリジンに登録されたService Workerが終了・登録解除されること。

  5. オリジン由来のリソースがユーザーエージェントのローカルキャッシュから消去されること。

  6. 上記全てがHTTPSオリジンのHTTP版にも伝播されること。

  7. 上記のいずれも、悪意のあるアクティブなドキュメントがメモリに面白いデータを保持し、それがクリアされたら再設定することでバイパスされないこと。

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

本書はABNF文法を[RFC5234]で定義し[RFC7405]で更新され、RFC7230・セクション7で定義された#rule拡張と、同文書のセクション3.2.6で定義されているquoted-stringルールを用いて構文を記述しています。

また本書アルゴリズムや本文上の基本的概念の多くはInfra Standard [INFRA] を参照します。

3. サイトデータのクリア

開発者はリクエストに対するレスポンスで Clear-Site-Data HTTPレスポンスヘッダを配信することで、ユーザーエージェントにさまざまな関連データのクリアを指示できます。

Clear-Site-Data HTTPレスポンスヘッダーフィールドは、ユーザーエージェントに対し、特定種類のすべてのデータを削除すべきであることを通知します。このヘッダーは次の文法で表現されます:

Clear-Site-Data = 1#( quoted-string )
; #rule はRFC7230のセクション7で定義されています。

§3.2 Fetch統合 および §4.1 パースClear-Site-Data ヘッダーの処理方法を記述します。

この文書では、この仕組みでクリアできる既知のデータ型の初期セットを定義します。下記に説明があります。将来のバージョンでは、このヘッダーで追加のデータ型をサポートでき、その場合はquoted-string文法に準拠する必要があります。ユーザーエージェントは、ヘッダーのパース時に未知の型を無視しなければなりません(MUST)。

"cache"

"cache"型は、サーバーが特定オリジンresponseurl に関連付けられたローカルキャッシュデータを削除したいことを表します。これには当然ながらネットワークキャッシュも含まれますが、ユーザーエージェントが実装する他の多様なキャッシュ(プリレンダページ、スクリプトキャッシュ、シェーダキャッシュ等)のデータも削除します。

実装詳細は§4.2.3 オリジンのキャッシュクリア参照。

https://example.com/clearからレスポンスが届いたとき、以下のヘッダーでオリジンhttps://example.comに関連するキャッシュがクリアされます:
Clear-Site-Data: "cache"

注: キャッシュは通常オリジン単位ではなくURLやタイムスタンプ単位で管理されています。そのため、実際にはオリジン指定のキャッシュクリアは線形走査が必要となり、大きなキャッシュでは非常に高コストです。

"cookies"

"cookies"型は、サーバーが特定オリジンresponseurl に関連付けられたクッキーを削除したいことを表します。クッキーに加え、HTTP認証認証情報 [RFC7235]、Channel ID [CHANNELID] や Token Binding [TOKBIND]等のオリジン依存トークンもクリアされます。

実装詳細は§4.2.4 オリジンのクッキークリア参照。

https://example.com/clearからのレスポンス時、下記ヘッダーでオリジンhttps://example.comに関連するクッキー、並びに同じ登録ドメイン配下すべてのオリジンのクッキー(例 https://www.example.com/https://more.subdomains.example.com/)がクリアされます。
Clear-Site-Data: "cookies"
"storage"

"storage"型は、サーバーが特定オリジンresponseurlに関連付けられたローカル保存データを削除したいことを表します。ここには(localStorage, sessionStorage, [INDEXEDDB], [WEBDATABASE]等)や、Service Worker登録のような周辺的仕組みも含みます。

実装詳細は§4.2.5 オリジンのDOMアクセシブルストレージクリア参照。

https://example.com/clearからのレスポンス時、下記ヘッダーでhttps://example.comのDOMアクセシブルストレージがクリアされます:
Clear-Site-Data: "storage"
"executionContexts"

"executionContexts"型は、サーバーが現在特定オリジンに対応してレンダリングしている responseurl の実行コンテキストを無効化し再読み込みすることを表します。

https://example.com/clearからのレスポンス時、下記ヘッダーで https://example.com の実行コンテキストが無効化・再読み込みされます:
Clear-Site-Data: "executionContexts"
"*"

"*"(ワイルドカード)疑似型は、サーバーがすべての型を指定した場合と同じ効果をもたらすことを表します。

https://example.com/clearからのレスポンス時、下記ヘッダーで https://example.com に関連するすべてのクッキー・キャッシュ・DOMアクセシブルストレージがクリアされ、同オリジンの実行コンテキストも無効化・再読み込みされます:
Clear-Site-Data: "*"

注: ワイルドカードは将来型追加時にも前方互換的に全型をカバーします。

幅広いクリーニングが目的ならワイルドカードを使ってください(DO)。

上記4種の略記としてワイルドカードを使うのは推奨しません(DO NOT)。将来意味が変わるからです。

注: ここで定義した構文は本ドキュメント将来の拡張で、型指定により細かいフィルタが追加される場合も互換です。例として、"cookies" の個別値除外機能拡張が予想されます。すべての型名を二重引用符で囲んでおくことで、簡単なカンマ分割処理からヘッダー値をJSONで解釈する高度処理に移行しても下位互換が保てます。

3.2. Fetch統合

モンキーパッチ!Anneと相談のこと。

Clear-Site-Data ヘッダーがネットワークから受信したHTTP response に存在する場合は、そのレスポンスをユーザーに表示する前にデータをクリアしなければなりません(MUST)。つまり、現行のHTTP-network fetchアルゴリズムのステップ14の後に、次のステップを実行します:

  1. credentials flagがセットされ、かつresponseheader listClear-Site-Dataヘッダーが含まれていれば、§4.2 responseのデータクリアresponseに対して実行する。

注: これはSet-Cookieヘッダー処理のに実行されます。クッキーをクリアする場合はすべて消去です。これは部分的なクッキー消去によるアプリケーションの不定/脆弱状態を避ける意図です。特定クッキーの削除はSet-Cookieヘッダで失効させることで行うべきです。

注: fetchのcredentials flagは本来クッキーの変更制限ですが、Clear-Site-Dataは一貫性の観点から全タイプにこの制約を適用します。

4. アルゴリズム

4.1. パース

responseが与えられたとき、ユーザーエージェントは responseClear-Site-Data ヘッダーをパース して、タイプのリストを返すことができます。手順は次の通りです:

  1. typesを空リストにする。

  2. headerを、extracting header list values(引数 Clear-Site-Dataresponseheader list)の結果とする。

  3. headernullまたはfailureなら空リストを返す。

  4. header の各typeについて、最初に一致するものがあればその文を実行する(switch on type):

    `"cache"`

    cachetypes に追加

    `"cookies"`

    cookiestypes に追加

    `"storage"`

    storagetypes に追加

    `"executionContexts"`

    executionContextstypes に追加

    `"*"`

    cachecookiesstorageexecutionContextstypes にすべて追加

  5. types を返す。

注: 現行の値は上のシンプルなswitch文で処理できます。今後型定義が複雑化した場合はパーサ全体をJSON処理に移行することになるでしょう。

4.2. response のデータクリア

responseresponse)が与えられたとき、ユーザーエージェントは responseのサイトデータクリア を次の手順で行えます:

  1. もしresponseurla priori authenticated URLでなければ、break

  2. types responseのClear-Site-Dataヘッダーをパースの結果とする。

  3. originresponseurloriginとする。

  4. browsing contexts origintypesのデータ消去準備の結果とする。

  5. types の各typeについて:

    1. 最初に一致するものに応じて実行:

      "cache"

      originのキャッシュクリア

      "cookies"

      originのクッキークリア

      "storage"

      originのDOMアクセシブルストレージクリア

  6. もしtypesが"executionContexts"を含むなら、browsing contextsをリロード

注: ユーザーエージェントは開発者向けにクリア動作のデバッグ手段を提供することが推奨されます。例えば成功を示すコンソールメッセージやタイムラインエントリが該当します。

4.2.1. originのデータ消去準備

origin (origin) と type のリスト(types)が与えられたとき、ユーザーエージェントは originのデータ消去準備 を次の手順で行えます。このアルゴリズムは、消去されたデータをメモリ上のJavaScript変数から再生成できないように、サンドボックス化されたbrowsing contextのリストを返します。

  1. sandboxedを空リストにする。

  2. typesが"executionContexts"を含まない場合、sandboxedを返す。

  3. ユーザーエージェントの全browsing contextの各contextについて:

    1. documentcontextactive documentとする。

    2. もしdocumentrelevant settings objectoriginoriginでなければ、continue

    3. サンドボックスディレクティブのパースを空文字列を入力値、documentactive sandboxing flag setを出力値として実行。

    4. contextsandboxedに追加

  4. sandboxedを返す。

4.2.2. browsing contexts をリロードする

browsing contextscontexts)のリストが与えられた場合、ユーザーエージェントは以下のように browsing contexts をリロードする ことができる:

  1. contexts の各 context について:

    1. contextactive documentrelevant settings objectglobal objectLocation オブジェクトの reload() を実行する。

      これは最も単純な方法だが、おそらくドキュメントとそのコンテキストに少し深く入り込みすぎている。おそらく HTML から該当する部分を分解してコピー/貼り付けする必要がある。

4.2.3. origin のキャッシュをクリアする

originorigin)が与えられた場合、ユーザーエージェントは以下のように origin のキャッシュをクリアする ことができる:

  1. hostoriginhost とする。

  2. cache list を、network cache から、その target URIhosthost と同一であるエントリの集合とする。

  3. cache list の各 entry について:

    1. entrynetwork cache から削除する。

  4. ユーザーエージェントが純粋な network cache 以外のキャッシュを実装している場合、それらのキャッシュからも origin に一致するすべてのエントリを削除しなければならない。

    ここでは [RFC7234] で定義される network cache を扱っているが、これはユーザーエージェントがキャッシュするすべてではない。ベンダー固有のセクションでどこまで曖昧にできるか?たとえば、Chrome はプリレンダページ、スクリプトキャッシュ、WebGL シェーダーキャッシュ、WebRTC の諸要素、アドレスバー候補キャッシュ、表現でないネットワーク関連のさまざまなもの(HSTS/HPKP, SCDHなど)もクリアする。おそらく [STORAGE] でより明確になるかもしれない?

4.2.4. origin の cookie をクリアする

originorigin)が与えられた場合、ユーザーエージェントは以下のように origin の cookie をクリアする ことができる:

注: すべての 登録ドメイン の cookie を削除する。cookie は同一生成元ポリシーを無視するためであり、特定のサブドメインのみの cookie をクリアした場合、アプリケーションが不定状態に陥るリスクがある。例えば accounts.google.commail.google.com の双方にはサインイン状態を示す cookie が存在する。

注: このアルゴリズムはユーザーエージェントがcookie store[RFC6265] の 5.3 節に記載)を実装しており、host で cookie のリストを取得し、個々の cookie を削除できることを前提とする。

  1. registeredorigin登録ドメイン とする(host の登録ドメイン)。

  2. cookie listcookie store から、domain 属性が domain-match となる registered の cookie セットとする。

  3. cookie list の各 cookie について:

    1. cookiecookie store から削除する。

  4. ユーザーエージェントが他の cookie 風ストレージをサポートしている場合、それも origins のうち、host登録ドメインregistered であるものについて全てクリアしなければならない。

    注: 例えば、ユーザーエージェントが Flash をサポートしている場合は、NPP_ClearSiteData でローカルストアオブジェクトもクリアされる。

  5. [CHANNELID] の Channel ID と [TOKBIND] のバウンドトークンを、origins のうち、host登録ドメインregistered であるものからクリアする。

  6. authentication entries および proxy-authentication entries を、origins のうち host登録ドメインregistered であるものについてクリアする。

bound tokens/IDs や HTTP 認証のクリアのプロセスは非常に曖昧。<https://github.com/w3c/webappsec-clear-site-data/issues/2>

4.2.5. origin の DOM からアクセス可能なストレージをクリアする

originorigin)が与えられた場合、ユーザーエージェントは以下のように origin の DOM からアクセス可能なストレージをクリアする ことができる:

  1. ユーザーエージェントの local storage areas [HTML] の各 area について:

    1. areaoriginorigin である場合:

      1. area に関連付けられた clear()Storage オブジェクト上で実行する。

  2. ユーザーエージェントの session storage areas [HTML] の各 area について:

    1. areaoriginorigin である場合:

      1. area に関連付けられた clear()Storage オブジェクト上で実行する。

  3. origin 用の databases [INDEXEDDB] の各 database について:

    1. Delete database

  4. ユーザーエージェントの service worker registrations の各 registration について:

    1. registrationscope URLoriginorigin の場合:

      1. registrationunregister() を実行する。

  5. ユーザーエージェントの application caches の各 appcache について:

    1. appcacheapplication cache group が、originorigin である URL で識別される場合:

      1. appcache を破棄する。

  6. その他のスクリプトからアクセス可能なストレージについても、ユーザーエージェントはこの origin に関連付けられたすべてのデータを削除しなければならない。これには(但し限定されない)以下が含まれる:

    1. origin の WebSQL データベース [WEBDATABASE]

    2. origin のファイルシステム [file-system-api]

    3. プラグインデータ(例:Flash の NPP_ClearSiteData など)

    4. Moar?

5. セキュリティ考慮事項

5.1. 不完全なクリアリング

ストレージの種類を一つだけクリアした場合に、アプリケーションが不定状態に陥る可能性がある。これに対しては、すべてのストレージオプションをまとめてクリアし、ヘッダーをセキュア接続で配信することを必須とすることで、ある程度緩和ができる。

5.2. Service worker

Clear-Site-Data ヘッダーは、ネットワーク経由で取得されたレスポンスに対してのみ尊重されるべきであり、service worker から提供されるレスポンスには適用されてはならない。

service worker は、スコープ内のリソース要求(サードパーティ要求も含む)に対して任意のレスポンスを返せるため、Clear-Site-Data をサポートすると任意の origin のデータをクリアできる権限を与えてしまうことになる。

あるリクエストが service worker 宛に送られ、それが処理されず、service-workers mode を "none" にして再実行されネットワークに送られた場合、そのレスポンスはネットワークレスポンスなのでハンドリングできる。前回の service worker からの応答取得は無関係である。

また、service worker アップデートはネットワークレスポンスとなるため、この制約の影響を受けない。これは §1.1.4 Kill Switch のユースケースのためにも重要である。

6. プライバシー考慮事項

6.1. Web 開発者がタイミングを制御

適切なタイミングで Clear-Site-Data が発火される場合、ユーザーエージェントから機密データがクリアされることでユーザーのプライバシーやセキュリティが高まる。しかし、データクリアのトリガータイミングはウェブ開発者(ユーザーではない)が制御していることに注意。悪意のないサイト管理者であっても、ユーザは特定のタイミングでデータがクリアされることを保証できず、またどのデータ種類がクリアされるかもユーザが制御できない。

ユーザーが特定のタイミングでサイトデータが実際にクリアされたことを保証したい場合は、ユーザーエージェント自身によるデータ消去機能を利用すべきである。

最低限として、ユーザーエージェントは([RFC6919] の意味において)ウェブ開発者に提供している機能はユーザーにも提供「すべき」である。理想的には、プラットフォームレベルを超える機能(履歴のクリアなど)も提供することが望ましい。

6.2. ディスクに残るデータ

Clear-Site-Data はユーザーエージェント内でクリアイベントを発火させるが、クリアイベントの後にユーザーのディスクの状態がどうなるかについては保証しにくい。とくに、すべてのサイトデータの痕跡をディスクから確実に消去する責任はユーザーエージェントにあるが、これは非常に難しい作業になりえる(たとえば仮想メモリなど)。

要するに、多くのユーザーエージェントは「ベストエフォート」で消去処理を実装しているが、完全な消去を保証できるわけではない。

ユーザーが本当にサイトデータがディスクに残らないことを保証したい場合、「意図的にディスクへデータを書き込まない」ことを約束しているブラウジングモード(Chrome の「シークレット」、IE の「InPrivate」など)を利用するのが最善である。これらのモードはより高い防御になるが、それでも完全には防げない制限がある。

7. IANA考慮事項

恒久的なメッセージヘッダーフィールドレジストリは以下の登録で更新する必要がある: [RFC3864]

7.1. Clear-Site-Data

ヘッダーフィールド名
Clear-Site-Data
対象プロトコル
http
ステータス
standard
著者/変更管理者
W3C
仕様ドキュメント
本仕様(§3.1 The Clear-Site-Data HTTP Response Header Field を参照)

8. 謝辞

Michal Zalewski がこのコンセプトのバリエーションを提案し、Mark Knichel が詳細化に協力した。

適合性

文書の表記規則

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

本仕様書における文書のすべての本文は、明示的に非規範的または例、注意(ノート)と記載された節を除き、規範的である。 [RFC2119]

本仕様での例は「for example」で始まるか、class="example" によるスタイル分離で示される。例えば:

これは情報的な例の一つです。

情報ノートは「Note」で始まり、class="note" で本文と分離される。例えば:

Note, これは情報ノートです。

適合アルゴリズム

(「先頭の空白文字を取り除く」や「false を返してこの手順を中断する」などの)アルゴリズム中で命令形で記載された要件は、そのアルゴリズムの導入文で使われているキーワード("must"、"should"、"may" など)の意味で解釈されること。

アルゴリズムまたは手順として記述された適合要件は、その最終的な結果が同等である限り、どのような方法で実装してもよい。特に、本仕様書で定義されるアルゴリズムは理解しやすいことを意図しており、高速に動作することを意図しているわけではない。実装者は最適化することが推奨される。

索引

本仕様書で定義された用語

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

参考文献

規範的参考文献

[CHANNELID]
Dirk Balfanz; Ryan Hamilton. Transport Layer Security (TLS) Channel IDs. URL: https://tools.ietf.org/html/draft-balfanz-tls-channelid
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[FILE-SYSTEM-API]
Eric Uhrhane. File API: Directories and System. 2014年4月24日. NOTE. URL: https://www.w3.org/TR/file-system-api/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INDEXEDDB]
Nikunj Mehta; et al. Indexed Database API. 2015年1月8日. REC. URL: https://www.w3.org/TR/IndexedDB/
[IndexedDB-2]
Ali Alabbas; Joshua Bell. Indexed Database API 2.0. 2017年11月16日. PR. URL: https://www.w3.org/TR/IndexedDB-2/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[MIXED-CONTENT]
Mike West. Mixed Content. 2016年8月2日. CR. URL: https://www.w3.org/TR/mixed-content/
[PSL]
Public Suffix List. Mozilla Foundation.
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[RFC3864]
G. Klyne; M. Nottingham; J. Mogul. Registration Procedures for Message Header Fields. 2004年9月. Best Current Practice. URL: https://tools.ietf.org/html/rfc3864
[RFC5234]
D. Crocker, Ed.; P. Overell. Augmented BNF for Syntax Specifications: ABNF. 2008年1月. Internet Standard. URL: https://tools.ietf.org/html/rfc5234
[RFC6265]
A. Barth. HTTP State Management Mechanism. 2011年4月. Proposed Standard. URL: https://tools.ietf.org/html/rfc6265
[RFC6454]
A. Barth. The Web Origin Concept. 2011年12月. Proposed Standard. URL: https://tools.ietf.org/html/rfc6454
[RFC7230]
R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing. 2014年6月. Proposed Standard. URL: https://tools.ietf.org/html/rfc7230
[RFC7234]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Caching. 2014年6月. Proposed Standard. URL: https://tools.ietf.org/html/rfc7234
[RFC7235]
R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Authentication. 2014年6月. Proposed Standard. URL: https://tools.ietf.org/html/rfc7235
[RFC7405]
P. Kyzivat. Case-Sensitive String Support in ABNF. 2014年12月. Proposed Standard. URL: https://tools.ietf.org/html/rfc7405
[SERVICE-WORKERS]
Alex Russell; et al. Service Workers 1. 2017年11月2日. WD. URL: https://www.w3.org/TR/service-workers-1/
[TOKBIND]
Andrei Popov; et al. The Token Binding Protocol Version 1.0. URL: https://tools.ietf.org/html/draft-ietf-tokbind-protocol
[URL]
Anne van Kesteren. URL Standard. Living Standard. URL: https://url.spec.whatwg.org/
[WEBDATABASE]
Ian Hickson. Web SQL Database. 2010年11月18日. NOTE. URL: https://www.w3.org/TR/webdatabase/

非規範的参考文献

[CSP]
Mike West. Content Security Policy Level 3. 2016年9月13日. WD. URL: https://www.w3.org/TR/CSP3/
[RFC6919]
R. Barnes; S. Kent; E. Rescorla. Further Key Words for Use in RFCs to Indicate Requirement Levels. 2013年4月1日. Experimental. URL: https://tools.ietf.org/html/rfc6919
[STORAGE]
Anne van Kesteren. Storage Standard. Living Standard. URL: https://storage.spec.whatwg.org/

課題索引

Monkey patching! Anne に相談せよ。
これは最も単純な方法だが、おそらくドキュメントとそのコンテキストに少し深く入り込みすぎている。おそらく HTML から該当する部分を分解してコピー/貼り付けする必要がある。
ここでは [RFC7234] で定義される network cache を扱っているが、これはユーザーエージェントがキャッシュするすべてではない。ベンダー固有のセクションでどこまで曖昧にできるか?たとえば、Chrome はプリレンダページ、スクリプトキャッシュ、WebGL シェーダーキャッシュ、WebRTC の諸要素、アドレスバー候補キャッシュ、表現でないネットワーク関連のさまざまなもの(HSTS/HPKP, SCDHなど)もクリアする。おそらく [STORAGE] でより明確になるかもしれない?
bound tokens/IDs や HTTP 認証のクリアのプロセスは非常に曖昧。<https://github.com/w3c/webappsec-clear-site-data/issues/2>
Moar?