数据清理

Firefox 具有多种数据清理功能。它们允许用户清除偏好设置和网站数据。清除数据是保护用户隐私的重要功能。数据清理有助于缓解两个主要的隐私问题。

  1. 网站通过网络公开的 API 和存储跟踪用户。这可以是传统的存储,例如 localStorage 或 Cookie。但是,网站还可以使用超级 Cookie(例如缓存)在浏览器中持久存储数据。

  2. 控制计算机的攻击者可以从 Firefox 中泄露数据,例如历史记录、密码等。

保护背景

其他浏览器有哪些类似的保护措施?

所有主流浏览器都实现了数据清理功能(ChromeEdgeSafariBrave)。它们通常包括一种方法,允许用户在可配置的时间范围内清除站点数据,以及要清除的数据类别列表。

Chrome、Edge 和 Brave 都共享 Chromium 的数据清理对话框,并进行了一些小的调整。值得注意的是,Brave 通过类似于 Firefox 的关闭时清理机制对其进行了扩展,而 Chrome 仅支持在关闭时专门清除站点数据。

Safari 的历史记录清理功能仅允许用户指定时间范围。它不允许按类别过滤,但会清除所有与网站相关的数据。

所有浏览器都允许通过开发者工具对网站 Cookie 和存储进行细粒度的控制。

是否已标准化?

这是一个浏览器用户体验功能,因此没有标准化。它不是 Web 平台的一部分。

有一个标准化的 HTTP 标头,网站可以发送它来清除关联的浏览器缓存、Cookie 和存储:Clear-Site-Data。但是,自 Bug 1671182 以来,Firefox 不再允许网站通过该标头清除缓存。

它如何融入我们“零隐私泄漏”的愿景?

清除站点数据可以保护用户免受各种跟踪技术的侵害,这些跟踪技术依赖于浏览器状态来(重新)识别用户。虽然全面 Cookie 保护涵盖了许多跨站点跟踪场景,但清除站点数据还可以额外防止第一方跟踪和其他绕过 TCP 的跟踪方法,例如 导航跟踪

Firefox 状态

此保护在 Firefox 中的发布状态如何?

这套长期存在的特性已在默认 ETP 模式下的正式版中发布。在 Firefox 91 中,我们引入了 增强型 Cookie 清理,它利用了 TCP 的 Cookie 存储。此功能仅对启用了 TCP 的用户有效 - 对用户而言,默认情况下 TCP 未启用。

是否有未完成的工作?

Bug 1422365 以来,ClearDataService 提供了一个通用的接口来清除各种存储实现的数据。但是,我们还没有涵盖所有浏览器状态。还有一些较小的盲点,其中大多数列在这个 元错误 中。还有一个很长的数据清理错误积压 在这里

清除历史记录 UI 具有直观且现代的 UI,它为用户提供了一种简单的方法来清除其数据,同时让用户感觉他们的隐私在 Firefox 中得到了保障。UI 更改是在这个 元错误 中进行的。

对于较大的 Firefox 配置文件,数据清理可能需要很长时间。由于这些操作主要在主线程上运行,因此这可能会锁定 UI,使浏览器无法响应,直到操作完成。

通常,值得重新审视 ClearDataService 及其他地方的更简洁的实现,以查看我们可以在哪里改进清理性能。

缓慢的数据清理在关闭时尤其成问题。如果关闭时清理功能花费太长时间来清除存储,则父进程将被终止,从而导致关闭崩溃。Bug 1756724 提出了对此的解决方案:我们可以在清理数据时显示一个进度对话框。这样,我们可以允许更长的关闭阶段,因为用户知道我们正在清理数据。

重要的未解决错误

现有文档

-

技术信息

功能首选项

首选项 描述
privacy.sanitize.sanitizeOnShutdown 是否在 Firefox 关闭时清除数据。
privacy.clearOnShutdown.* 关闭时要清除的数据类别。True = 清除类别。仅当 privacy.sanitize.sanitizeOnShutdown 启用时才会清除数据。
privacy.clearHistory.* 在清除历史记录或浏览器上下文中要清除的数据类别。True = 清除类别。
privacy.clearSiteData.* 在清除站点数据上下文中要清除的数据类别。True = 清除类别。

它是如何工作的?

以下部分列出了 Firefox 中面向用户的 数据清理功能,以及简要说明和图表,说明它们如何与 nsIClearDataService 中的主要清理逻辑相关联。

最近对其清除历史记录对话框的改进导致各种入口点的组合,以使用相同的对话框。

清除浏览数据和 Cookie

newClearHistoryDialog

关闭时清理

  • 可以通过 about:preferences#privacy => 历史记录启用:Firefox 将:使用自定义历史记录设置 => 选中“关闭 Firefox 时清除历史记录”

    • Bug 1681493 之后,它也可以通过复选框“关闭 Firefox 时删除 Cookie 和站点数据”来控制。

  • 在 Firefox 关闭时,将清除所选类别的所有数据。类别的列表在 Sanitizer.sys.mjs 中定义。

  • 类别与“清除最近历史记录”对话框中的类别相同。

  • 例外情况

    • 将“Cookie”权限设置为 ACCESS_SESSION 的网站始终会被清除,即使关闭时清理功能被禁用。

    • 将“Cookie”权限设置为 ACCESS_ALLOW 的网站不受数据清理影响。

    • 警告:当在要清除的类别中选择“站点设置”时,Sanitizer 也会删除例外权限。这会导致上述例外情况被清除。

  • 使用 PrincipalsCollector 获取与其关联的站点数据的主体列表。

  • getAllPrincipals 查询 QuotaManager、Cookie 服务和服务工作者管理器以获取主体。

  • 获取的主体列表将检查权限例外情况。设置 Cookie ACCESS_ALLOW 权限的主体将从列表中删除。

  • Sanitizer.sys.mjs 调用 ClearDataService 以清除过滤列表中每个主体的 数据。

  • 来源

流程图 TD A[清除历史记录] & B[清除站点数据] & C[关闭时清除]-->|初始化| D[sanitizeDialog.js] D --> |清除|E[Sanitizer.sys.mjs] E --> F[ClearDataService.sys.mjs]

忘记此网站

  • 可通过汉堡菜单 => 历史记录 => 项目的上下文菜单 => 忘记此网站访问。

  • 清除与所选网站的基本域关联的所有数据。

  • [使用 TCP] 还清除嵌入在顶级基本域下的任何第三方网站的数据。

  • 目标是从 Firefox 中删除与该网站关联的所有痕迹。

  • 清除 [标志]

    • 历史记录、会话历史记录、下载历史记录

    • 所有缓存

    • 站点数据(Cookie、DOM 存储)

    • 加密媒体扩展 (EME)

    • 密码(请参阅 Bug 702925

    • 权限

    • 内容首选项(例如页面缩放级别)

    • 预测器网络数据

    • 报告(Reporting API)

    • Client-Auth-Remember 标志、证书例外情况

    • **不会**清除书签。

  • 来源

流程图 TD A[位置控制器.js] --> B[removeDataFromBaseDomain] B --> C[ForgetAboutSite.sys.mjs] C --> D[ClearDataService.sys.mjs]

image2

管理 Cookie 和站点数据

  • 可通过 about:preferences#privacy => Cookie 和站点数据 => 管理数据访问。

  • 清除 [标志]

    • Cookie

    • DOM 存储

    • EME

    • 缓存:CSS、预检、HSTS

  • 列出按基本域分组的站点 Cookie 和存储。

  • 无法在更细粒度(主机或来源)级别上清除数据。这是一个经过深思熟虑的决定,旨在使此 UI 清理更彻底且更容易理解。如果用户需要非常细粒度的 数据管理功能,他们可以安装附加组件或使用开发者工具。

  • 允许用户清除特定网站或所有网站的存储。

  • [使用 TCP] 还清除嵌入在顶级基本域下的任何第三方网站的数据。

  • 通过 SiteDataManager.getSites 收集站点列表。

  • 在删除之前,通过 SiteDataManger.promptSiteDataRemoval 提示用户。

  • 在删除时,如果所有站点都被选中,则调用 SiteDataManager.removeAll();否则,调用 SiteDataManager.remove() 并传递要删除的站点列表。

  • 来源

清除 Cookie 和网站数据

  • 可通过身份面板访问(点击 URL 地址栏中的锁图标)。

  • 清除 [标志]

    • Cookie

    • DOM 存储

    • EME

    • 缓存:CSS、预检、HSTS

  • 按钮处理程序方法: clearSiteData

  • 使用当前选定标签的基本域名调用 SiteDataManager.remove()。

  • 只有当某个站点具有任何 Cookie 或配额存储时,才会显示该按钮。检查 此处

  • 来源

image7

image5

关于通过 about:preferences#privacy 可访问的不同数据清除功能的概述。

用户可以按需清除数据,或者选择在关闭时清除数据。对于后者,用户可以为特定来源设置例外,使其不会被清除或始终在关闭时被清除。

ClearDataService

此服务作为一个统一的模块,用于保存 Firefox/Gecko 中所有数据清除逻辑。调用者可以使用 nsIClearDataService 接口清除数据。在 JS 中,可以通过 Services.clearData 访问此服务。

要指定要清除的状态,请将 标志 的组合传递到 aFlags 中。

浏览器状态的每个类别都应具有自己的清理程序实现,该实现向 ClearDataService 公开以下方法:- deleteAll:删除清理程序拥有的所有数据- deleteByPrincipal:删除与特定主体关联的数据。- deleteByBaseDomain:删除与给定基本域名关联的所有条目。这包括由“完全 Cookie 保护”分区的 数据。- deleteByHost:清除与主机关联的数据。不清除分区数据。- deleteByRange:清除与给定时间范围匹配的数据。- deleteByLocalFiles:删除为本地文件和其他无主机来源保存的数据。- deleteByOriginAttributes:清除与 OriginAttributesPattern 匹配的条目。

其中一些方法是可选的。请参阅 此处注释

如果清理程序不支持特定方法,我们通常会尝试回退到 deleteAll。出于隐私原因,我们尝试过度清除存储,而不是不足清除或根本不清除,因为我们无法定位单个条目。

image8

ClearDataService 由其他 Firefox/Gecko 组件调用的最重要清理方法概述。deleteDataFromPrincipal 以编程方式调用,而用户公开的数据清除功能则按基本域名、主机或所有数据进行清除。