清除站点数据

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 Inc.)
参与讨论:
提交 issue (查看已开放的 issue)

摘要

本文档定义了一种命令式机制,允许 Web 开发者指示用户代理清除与某个主机相关的本地存储数据。

本文档状态

本节描述了本文档发布时的状态。其他文档可能会取代本文档。当前 W3C 发布的文档列表以及本技术报告的最新修订版可在 W3C 技术报告索引 https://www.w3.org/TR/ 找到。

本文档由 Web 应用安全工作组 作为工作草案发布。本文档预期成为 W3C 推荐标准。

(存档) 的公共邮件列表 public-webappsec@w3.org (参见 说明) 是对本规范进行讨论的首选方式。 发送邮件时, 请在主题中包含 “clear-site-data”, 最好如下所示: “[clear-site-data] …评论摘要…

作为工作草案发布不代表 W3C 会员的认可。该文档为草案,可能随时更新、替换或被其他文档废弃。不应将其作为正式成果引用,仅作为在研工作。

本文档由 Web 应用安全工作组 产生。

本文档由依据 2004 年 2 月 5 日 W3C 专利政策 运行的团队产生。 W3C 维护了一份 与本组交付物有关的专利公开的公开列表; 该页面还包含专利披露的说明。 如个人确实知悉其所掌握的专利包含 必要权利要求,则必须按照 W3C 专利政策第 6 节 进行披露。

本文档受 2017 年 3 月 1 日 W3C 流程文档 管辖。

1. 介绍

本节不具规范性。

Web 应用程序会将数据存储在用户本地计算机上,以便在用户离线时提供功能,并在用户在线时提升性能。这些本地缓存对用户和开发者都带来了显著优势,但同样也存在风险。

用户的数据既敏感又有价值;Web 开发者应当采取合理措施予以保护。可以采取的措施之一是,在存储前加密数据。另一个措施是在数据不再需要时(例如用户退出应用或删除账号时)从用户设备上移除数据。

站点作者可以通过 JavaScript 移除多种存储机制中的数据,但某些机制难以可靠处理。例如,Cookie 可以通过 JavaScript 访问 document.cookie 部分清除,但 HttpOnly Cookie 只能通过 HTTP 响应中的多个 Set-Cookie 头来移除。这需要对主机设置的所有 Cookie 了如指掌,而这通常很复杂。缓存则更难,没有命令式接口可直接操作浏览器的网络缓存。

本文档定义了一种新机制,用以移除这些及其它类型本地存储中的数据,使 Web 开发者能够通过 Clear-Site-Data HTTP 响应头清除用户本地缓存数据。

1.1. 示例

1.1.1. 注销

用户通过携带 CSRF 防护的 POST 请求 https://supersecretsocialnetwork.example.com/logout 退出 “超级机密社交网络”,站点作者希望确保本地存储数据因此被移除。

他们可以在响应中发送如下 HTTP 头实现此目的:

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

1.1.2. 定向清除

用户通过携带 CSRF 防护的 POST 请求 https://megacorp.example.com/logout 退出 Megacorp Inc. 站点。Megacorp 有大量子域服务,数量之多导致退出后哪些子域的数据可以安全清除并不清楚。有个选择是全部清除,之后应对各种副作用。然而 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

用户通过携带 CSRF 防护的 POST 请求 https://ads-are-awesome.example.com/optout 选择退出兴趣定向广告。站点作者希望移除可能包含跟踪信息的 DOM 可访问数据,但又要确保用户刚获得的退出 Cookie 不会被清除。

他们可在响应中发送以下 HTTP 头,仅包含除 "cookies" 以外的所有类型:

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

1.1.4. 紧急开关

“超级机密社交网络” 的开发者发现站点存在跨站脚本攻击漏洞,可能被恶意方注入任意代码。他们修复了漏洞,并添加了强 Content Security Policy [CSP] 以降低风险,但无法百分百确保客户端恢复到可信状态。也许攻击者有某种巧妙持久化手段?

他们可以在响应中发送如下 HTTP 头,清除本地所有数据源,从而降低持久型客户端 XSS 风险:

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

注意:安装 Service Worker 后,浏览器每隔约 24 小时会向服务器发起一次请求。这种更新 ping 很适合在出现重大事故时发送如上的清除头。[SERVICE-WORKERS]

1.2. 目标

总体目标是让 Web 开发者能更好地控制用户代理为其 origin 本地存储的数据。特别是,开发者应该能够可靠实现以下各点:

  1. origin 客户端本地存储机制的数据(如 [INDEXEDDB]、WebSQL、Filesystem、localStoragesessionStorage)被清除。

  2. origin 主机的 Cookie 被移除 [RFC6265]

  3. 为 origin 运行的 Web Worker(专用和共享)被终止。

  4. 为 origin 注册的 Service Worker 被终止并注销。

  5. origin 的资源被移除出用户代理的本地缓存。

  6. 以上所有操作可传播到对应 HTTPS origin 的 HTTP 版本。

  7. 上述措施无法被恶意活动文档绕过,也不会因感兴趣数据驻留内存并在清除后重写而失效。

2. 基础设施

本文档采用 ABNF 语法描述格式,具体定义见 [RFC5234],更新见 [RFC7405],并用到了 RFC7230 第7节中定义的 #rule 扩展,以及该文档第 3.2.6 节定义的 quoted-string 规则。

本文档算法及正文多项基础概念依赖于 Infra 标准 [INFRA]

3. 清除站点数据

开发者可以通过在响应中返回 Clear-Site-Data HTTP 响应头,指示用户代理清除各种类型的相关数据。

Clear-Site-Data HTTP 响应头字段向用户代理发送信号,告知其应移除某一类型集合的所有数据。该头字段的语法如下:

Clear-Site-Data = 1#( quoted-string )
; #rule 在 RFC 7230 第 7 节定义。

§3.2 Fetch 集成§4.1 解析 描述了 Clear-Site-Data 头的处理方式。

本文档定义了一组可通过该机制清除的基础数据类型。参见下方各自描述。未来版本该头可支持更多数据类型,这些类型必须符合 quoted-string 语法。用户代理在解析头字段时必须忽略未知类型。

"cache"

"cache" 类型表示服务器希望移除与某个 origin 相关的本地缓存数据,该 origin 来源于特定 responseurl。这包括 网络缓存,也会移除用户代理实现的其他缓存数据(预渲染页面、脚本缓存、着色器缓存等)。

实现细节参见 §4.2.3 清除缓存

当配合 https://example.com/clear 的响应发送时,下列头部将导致与 https://example.com 关联的缓存被清除:
Clear-Site-Data: "cache"

注意: 缓存通常不是按 origin 组织的,而是按 URL 及时间戳。这意味着在实际中,按 origin 清除缓存可能需要线性扫描。对于大型缓存,这会成为极其消耗资源的操作。

"cookies"

"cookies" 类型表示服务器希望移除与特定 origin 相关的 cookies,该 origin 来源于 responseurl。除 cookies 外,HTTP 身份验证凭据 [RFC7235] 及如 CHANNELID 和 TOKBIND 等 origin 绑定的令牌也会被同时移除。

实现细节参见 §4.2.4 清除 cookies

当配合 https://example.com/clear 的响应发送时,下列头部会清除与 https://example.com 关联的 cookies,也会清除同一注册域内任意 origin(如 https://www.example.com/https://more.subdomains.example.com/)的 cookies。
Clear-Site-Data: "cookies"
"storage"

"storage" 类型表示服务器希望移除与特定 origin 关联的本地存储数据, 该 origin 来源于 responseurl。这包括如 (localStoragesessionStorage[INDEXEDDB][WEBDATABASE] 等机制,以及与之相关的如 service worker 注册

实现细节参见 §4.2.5 清除 DOM 可访问存储

当配合 https://example.com/clear 的响应发送时,下列头部会导致该 origin 的 DOM 可访问存储被清除:
Clear-Site-Data: "storage"
"executionContexts"

"executionContexts" 类型表示服务器希望使当前渲染该 origin 的执行上下文失效并重新加载, 该 origin 来源于 responseurl

当配合 https://example.com/clear 的响应发送时,下列头部会使显示 https://example.com 的执行上下文失效并重新加载:
Clear-Site-Data: "executionContexts"
"*"

"*"(通配符)伪类型表示其效果等同于指定所有类型。

当配合 https://example.com/clear 的响应发送时,下列头部会导致与 https://example.com 相关的所有 cookies、缓存、本地存储被清除,且相关执行上下文失效并重新加载:
Clear-Site-Data: "*"

注意:通配符具备向前兼容性,即若将来头字段新增更多数据类型,通配符也会涵盖这些类型。

若意图进行广泛清理(即清除该头能知晓下所有数据类型),请务必使用通配符。

请勿将通配符作为上面四种类型的快捷写法,因为该语义未来可能发生变化。

注意: 此处定义的语法与未来对类型过滤机制的扩展兼容。例如,"cookies" 很可能将来需增加防止个别 cookie 被删除的机制。所有类型名用双引号包裹,使我们可无缝从简单字符串分割升级为 JSON 处理而不破坏兼容性。

3.2. Fetch 集成

猴子补丁!与 Anne 沟通。

若从网络获得的 HTTP response 包含 Clear-Site-Data 头,则必须在将响应渲染给用户前完成数据清除。即,在现有 HTTP-network fetch 算法的第 14 步后,执行下列步骤:

  1. 如果 credentials flag 被设定,且 response头字段列表包含名为 Clear-Site-Data 的头,则对 response 执行 §4.2 为响应清除数据

注意: 该步骤发生在处理 Set-Cookie 头之后。清除 cookies 时会全部清除,这一行为有意如此,因为只移除部分 cookie 可能导致应用处于不确定或脆弱状态。如需精确移除特定 cookies,应通过 Set-Cookie 头设置过期时间实现。

注意: 虽然 fetch 的 credentials flag 目的是限制对 cookies 的修改,Clear-Site-Data 出于一致性,对所有类型施加相同约束。

4. 算法

4.1. 解析

给定一个 response,用户代理可以解析 responseClear-Site-Data,返回类型列表,步骤如下:

  1. types 为空列表。

  2. header提取 Clear-Site-Dataresponse头字段列表的结果。

  3. 如果 headernull 或失败,返回空列表。

  4. header 中每个 type,逐条匹配如下分支:

    `"cache"`

    将 "cache" 添加入 types

    `"cookies"`

    将 "cookies" 添加入 types

    `"storage"`

    将 "storage" 添加入 types

    `"executionContexts"`

    将 "executionContexts" 添加入 types

    `"*"`

    将 "cache"、"cookies"、 "storage"、 以及 "executionContexts" 添加入 types

  5. 返回 types

注意: 当前所有值用上述分支即可覆盖。如后续类型定义更复杂,解析器届时会整体转用 JSON。

4.2. response 清除数据

给定一个 responseresponse),用户代理可以 response 清除站点数据,步骤如下:

  1. 如果 responseurl 不是 a priori 认证 URL,则 break

  2. types解析 responseClear-Site-Data 的结果。

  3. originresponseurlorigin

  4. browsing contexts准备为 origin 清除数据 的结果,参数为 origintypes

  5. 对于 types 中每个 type,逐条执行匹配:

    1. 匹配分支如下:

      "cache"

      清除 origin 缓存

      "cookies"

      清除 origin cookies

      "storage"

      清除 origin 的 DOM 可访问存储

  6. 如果 types 包含 "executionContexts",则重新加载 browsing contexts

注意: 鼓励用户代理为开发者提供调试该清除操作的机制,例如通过控制台消息或时间线条目显示结果。

4.2.1. 准备为 origin 清除数据

给定一个 originorigin)和类型列表 (types),用户代理可以准备为 origin 清除数据,步骤如下。该算法返回已沙箱化的浏览上下文列表,以防止其用内存中的 JavaScript 变量重建已清除数据。

  1. sandboxed 为空列表。

  2. 如果 types包含 "executionContexts",返回 sandboxed

  3. 对于用户代理的所有 浏览上下文中的每一个 context

    1. documentcontext活动文档

    2. 如果 document相关环境设置对象origin 不等于 origincontinue

    3. 解析沙箱指令,输入为空字符串,输出为 document激活沙箱标志集合

    4. 追加 contextsandboxed

  4. 返回 sandboxed

4.2.2. 重新加载browsing contexts

给定浏览上下文contexts)列表,用户代理可以按如下方式重新加载浏览上下文

  1. contexts中的每个context

    1. 执行context活动文档相关设置对象全局对象Location 对象的reload()

      这是最简单的做法,但它可能过于深入地干扰文档和它们的上下文。或许需要拆解并复制粘贴HTML中的相关部分。

4.2.3. 清除origin的缓存

给定一个originorigin),用户代理可以按如下方式清除origin的缓存

  1. hostorigin主机

  2. cache list网络缓存中其target URI主机host完全相同的所有条目的集合。

  3. cache list中的每个entry

    1. 网络缓存中移除entry

  4. 如果用户代理实现了除纯网络缓存以外的缓存,则必须移除与origin匹配的所有条目。

    这里处理的是[RFC7234]中定义的网络缓存,但实际上用户代理缓存远不止如此。供应商特有部分能模糊到什么程度?例如,Chrome 会清除预渲染页面、脚本缓存、WebGL 着色器缓存、WebRTC 各类内容、地址栏建议缓存及各种非内容表示的数据(HSTS/HPKP、SCDH等)。或许[STORAGE]会让这一点更清晰?

4.2.4. 清除origin的 cookies

给定一个originorigin),用户代理可以按如下方式清除origin的 cookies

注:我们会清除整个注册域的所有 cookie,因为 cookie 不遵守同源策略,如果只清除特定子域的 cookies,可能导致应用处于未定义状态。比如 accounts.google.commail.google.com 都有标识用户登录状态的 cookies。

注:此算法假设用户代理已实现cookie 存储(见[RFC6265]5.3节),能按主机检索 cookie 列表并删除单个 cookie。

  1. registeredorigin注册域主机

  2. cookie listcookie 存储中其domain属性与registered域匹配的所有 cookie 集合。

  3. cookie list中的每个cookie

    1. cookie 存储中移除cookie

  4. 如果用户代理支持其他类似 cookie 的存储方式,这些也必须针对origin主机注册域一起清除。

    注:例如用户代理支持 Flash,则通过NPP_ClearSiteData清除本地存储对象。

  5. 清除与[CHANNELID][TOKBIND]绑定的 Channel ID 及 token,这些必须与origin主机注册域一致。

  6. 清除与认证条目代理认证条目相关的所有记录,这些也必须与origin主机注册域一致。

同时清除绑定 token/ID 和 HTTP 认证的过程非常模糊。<https://github.com/w3c/webappsec-clear-site-data/issues/2>

4.2.5. 清除origin的 DOM 可访问存储

给定一个originorigin),用户代理可以按如下方式清除origin的 DOM 可访问存储

  1. 对用户代理中所有本地存储区[HTML]中的每个area

    1. 如果areaoriginorigin

      1. 在与area关联的clear()Storage 对象上执行。

  2. 对用户代理中所有会话存储区[HTML]中的每个area

    1. 如果areaoriginorigin

      1. 在与area关联的clear()Storage 对象上执行。

  3. origin数据库[INDEXEDDB]集合中的每个database

    1. 删除database

  4. 对用户代理中所有ServiceWorker 注册中的每个registration

    1. 如果registration作用域 URLoriginorigin

      1. registration执行unregister()

  5. 对用户代理中所有应用缓存的每个appcache

    1. 如果appcache应用缓存组originorigin确定:

      1. 丢弃appcache

  6. 对于任何其他脚本可访问的存储机制,用户代理必须删除与该 origin 相关的所有数据。包括(但不限于):

    1. origin 的 WebSQL 数据库[WEBDATABASE]

    2. origin 的文件系统[file-system-api]

    3. 插件数据(如 Flash 通过NPP_ClearSiteData),

    4. 还有吗?

5. 安全注意事项

5.1. 清除不彻底

仅清除一种类型的存储有可能会导致应用进入未定义状态。我们通过将所有存储选项一并清除,并要求该 header 只能通过安全连接传递,以一定程度上降低风险。

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可以通过清除敏感数据提升用户的隐私和安全性。但是,请注意 web 开发者(而不是用户)决定何时触发清除事件。即便假定站点作者无恶意,用户无法保证数据会在某一特定时刻被清除,也无法控制清除的数据类型。

如果用户希望确保站点数据在某一特定时间点被清除,应该依赖其用户代理提供的数据清除功能。

至少,用户代理“应该”([RFC6919]意义上)为用户提供与web开发者相同的功能。理想情况下,还会提供更多,例如清除浏览历史。

6.2. 磁盘上的数据残留。

虽然Clear-Site-Data会触发用户代理的清理操作,但很难保证在清理后磁盘上不再有任何站点数据残留。最终还是靠用户代理确保所有站点痕迹真正被移除,这往往非常困难(比如虚拟内存只是一个例子)。

简言之,大多数用户代理会以“尽力而为”方式实现数据清除,但无法保证彻底擦除。

如果用户希望保证站点数据不留存于磁盘,最佳做法是使用声称不会有意写盘的浏览模式(Chrome 的“无痕”、IE 的“InPrivate”等)。这些模式更能防止数据落盘,但边缘场景下依然有限制。

7. IANA 注意事项

永久消息头字段注册表应更新如下内容:[RFC3864]

7.1. Clear-Site-Data

头字段名
Clear-Site-Data
适用协议
http
状态
标准
作者/修改方
W3C
规范文档
本规范(见§3.1 Clear-Site-Data HTTP响应头字段

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,这是一个说明性注释。

合规算法

以祈使句形式表述在算法中的要求(如 “strip any leading space characters”(去除所有前导空格字符)或 “return false and abort these steps”(返回 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. 24 April 2014. 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. 8 January 2015. REC. URL: https://www.w3.org/TR/IndexedDB/
[IndexedDB-2]
Ali Alabbas; Joshua Bell. Indexed Database API 2.0. 16 November 2017. 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. 2 August 2016. 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. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[RFC3864]
G. Klyne; M. Nottingham; J. Mogul. Registration Procedures for Message Header Fields. September 2004. Best Current Practice. URL: https://tools.ietf.org/html/rfc3864
[RFC5234]
D. Crocker, Ed.; P. Overell. Augmented BNF for Syntax Specifications: ABNF. January 2008. Internet Standard. URL: https://tools.ietf.org/html/rfc5234
[RFC6265]
A. Barth. HTTP State Management Mechanism. April 2011. Proposed Standard. URL: https://tools.ietf.org/html/rfc6265
[RFC6454]
A. Barth. The Web Origin Concept. December 2011. 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. June 2014. 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. June 2014. Proposed Standard. URL: https://tools.ietf.org/html/rfc7234
[RFC7235]
R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Authentication. June 2014. Proposed Standard. URL: https://tools.ietf.org/html/rfc7235
[RFC7405]
P. Kyzivat. Case-Sensitive String Support in ABNF. December 2014. Proposed Standard. URL: https://tools.ietf.org/html/rfc7405
[SERVICE-WORKERS]
Alex Russell; et al. Service Workers 1. 2 November 2017. 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. 18 November 2010. NOTE. URL: https://www.w3.org/TR/webdatabase/

说明性引用

[CSP]
Mike West. Content Security Policy Level 3. 13 September 2016. 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. 1 April 2013. Experimental. URL: https://tools.ietf.org/html/rfc6919
[STORAGE]
Anne van Kesteren. Storage Standard. Living Standard. URL: https://storage.spec.whatwg.org/

问题索引

猴子补丁!和 Anne 沟通。
这虽然是最简单的事情,但很可能过于深入文档并弄乱了它们的上下文。我可能只需要分解并从 HTML 复制/粘贴相关部分。
我们在这里处理的是 [RFC7234] 中定义的网络缓存,但这远不是用户代理缓存的全部。我们在厂商特定部分可以多手动么?例如,Chrome 会清理预渲染页面、脚本缓存、WebGL 着色器缓存、WebRTC 各种零件、地址栏建议缓存、各种并非表现形式的网络相关内容(HSTS/HPKP、SCDH等)。也许 [STORAGE] 会更清晰?
清除绑定的令牌/ID 以及 HTTP 认证的过程非常模糊。<https://github.com/w3c/webappsec-clear-site-data/issues/2>
更多?