反弹跟踪保护

反弹跟踪保护 (BTP) 是 Gecko 中的一项反跟踪功能,它基于一组启发式方法检测反弹跟踪器(导航跟踪)。与Cookie 清理功能不同,它不依赖于跟踪器列表,这使其更易于与 Web 兼容,同时也能涵盖未知的反弹跟踪器。

标准化

该保护措施是 PrivacyCG 的一项工作内容。Gecko 中的实现严格遵循反弹跟踪缓解规范草案

Mozilla 还有一个关于反弹跟踪缓解的规范立场

行为

BTP 通过查看导航时间来检测反弹跟踪器。它建立了扩展导航的概念,该概念可以包含一系列短暂的重定向。这些短暂的重定向通常由反弹跟踪器使用。如果某个站点在如此短暂的重定向中访问 Cookie 或存储,则将其添加到分类列表中。已分类的反弹跟踪器的 Cookie、站点数据和缓存会定期清除。为了避免误报和清除可能对用户重要的数据,在过去 45 天内用户直接与之交互过的站点将免于被分类或清除。

请参阅反弹跟踪缓解说明,以获取有关该功能以及如何对跟踪器进行分类的更详细(尽管以 Chromium 为中心)的描述。

Gecko 实现

Gecko 实现的工作内容由以下元 Bug 跟踪:Bug 1839915 - [meta] 反弹跟踪保护

首选项

可以使用 privacy.bounceTrackingProtection.* 首选项启用该功能并调整其行为。请参阅StaticPrefList.yaml,获取包含描述的首选项列表。

主要功能首选项是 privacy.bounceTrackingProtection.mode,其中 0 表示完全禁用,1 表示完全启用。请参阅nsIBounceTrackingProtection.idl,获取完整选项列表。

日志记录

BTP 具有一个日志记录器,可以通过使用 MOZ_LOG 环境变量启动 Firefox 来启用它。使用 MOZ_LOG=BounceTrackingProtection:5 对每次导航进行详细日志记录,使用 MOZ_LOG=BounceTrackingProtection:3 进行更简洁的日志记录,重点关注分类和清除。

测试

在测试站点以确保它们不会因反弹跟踪行为而被清除时,您可以同时使用日志记录(如上所述)来观察分类,并通过浏览器工具箱直接调用该功能以提前触发清除。

您还可以检查开发者工具控制台中的警告消息,这些消息将在站点被分类时记录。例如

“bounce-tracking-demo-tracker-server.glitch.me”已被分类为反弹跟踪器。如果它在接下来的 3600 秒内未收到用户激活,则其状态将被清除。

以下部分中的代码段需要在浏览器工具箱中执行。请注意,虽然工具箱看起来像常规的开发者工具,但它是一个用于调试 Firefox 本身而非网站的特殊控制台。

触发所有已分类跟踪器的清除:

在导航到站点之前,将 privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec 设置为 0 或较小的数字。这控制站点在(分类)反弹后多快被清除。如果您不更新此首选项,则需要等待最多 1 小时才能清除站点。

清除通常每小时运行一次。要手动触发清除,可以使用以下代码段

await Cc[
  "@mozilla.org/bounce-tracking-protection;1"
].getService(Ci.nsIBounceTrackingProtection).testRunPurgeBounceTrackers();

返回值将是被清除的站点数组。请注意,清除适用于整个域名 (eTLD+1)。

测试页面

https://bounce-tracking-demo.glitch.me/ 是一个演示页面,其中包含两个显示反弹跟踪行为的链接。您可以结合上述方法使用它来验证机制是否正在运行。