重定向跟踪保护

从 79 版开始,Firefox 通过定期清除已知跟踪器设置的 Cookie 和网站数据来保护用户免受 **重定向跟踪** 的侵害。 只有当用户 阻止跟踪 Cookie (即,network.cookie.cookieBehavior 首选项设置为 4)时,才会从存储中清除这些数据。

其他 Cookie 策略的支持由 Bug 1643045 跟踪。

重定向跟踪定义

重定向跟踪是对跨站点导航的滥用,跟踪器会暂时将用户重定向到其网站,以便使用第一方存储来跨网站跟踪该用户。

跨站点导航是 Web 的核心功能;一个人可能在搜索引擎上搜索“最佳跑步鞋”,点击搜索结果阅读评论,最后点击链接从在线商店购买一双鞋。 过去,这些网站中的每一个都可能嵌入来自同一个跟踪器的资源,而跟踪器可以使用其 Cookie 将所有这些页面访问链接到同一个人。 为了保护用户的隐私,浏览器阻止跟踪器在第三方环境中使用 Cookie(例如,请参见 Firefox 的 增强型跟踪保护 (ETP)),但仍然允许它们作为第一方使用 Cookie,因为阻止第一方 Cookie 会导致网站中断。 重定向跟踪利用这一点来规避第三方 Cookie 阻止。

重定向跟踪器通过强制您在这段旅程中进行一次不可察觉的、短暂的停留到其网站,来实现其目的。 因此,您不会直接从评论网站导航到零售商,而是会先导航到重定向跟踪器,然后才能导航到零售商。 这意味着跟踪器作为第一方加载。 重定向跟踪器会将其存储在其第一方 Cookie 中的标识符与跟踪数据关联,然后将您转发到零售商。

清除哪些来源?

如果满足以下条件,则会清除来源

  1. 它在过去 72 小时内存储了 Cookie 或访问了其他网站存储(例如,localStorageIndexedDBCache API)。 由于 Cookie 是针对每个主机,因此我们将清除 Cookie 主机的 httphttps 来源变体。
  2. 该来源在我们的跟踪保护列表中 被归类为跟踪器
  3. 没有与相同基础域名 (eTLD+1) 相同的来源具有用户交互权限。
    • 一旦用户与来自该来源的顶级文档进行交互,该权限就会授予来源 45 天。 “交互”包括滚动。
    • 虽然此权限存储在每个来源级别,但我们将检查是否具有相同基础域名的任何来源具有此权限,以避免破坏具有子域名和相应 Cookie 设置的网站。

清除哪些数据?

Firefox 将清除 以下数据

  • 网络缓存和图像缓存
  • Cookie
  • AppCache
  • DOM 配额存储 (localStorage、IndexedDB、ServiceWorkers、DOM 缓存等)
  • DOM 推送通知
  • 报告 API 报告
  • 安全设置(即 HSTS)
  • EME 媒体插件数据
  • 插件数据(例如 Flash)
  • 媒体设备
  • 授予来源的存储访问权限
  • HTTP 身份验证令牌
  • HTTP 身份验证缓存

注意: 即使我们正在清除所有这些数据,但我们目前只在来源使用 Cookie 或其他网站存储时才标记来源以进行清除。

存储清除忽略来源属性。 这意味着将在 容器 和隔离存储(即来自 第一方隔离)中清除存储。

多久清除一次数据?

Firefox 基于内部事件 idle-daily 的触发来清除存储,该事件由以下条件定义

  • 它将在最早的最后一次 idle-daily 事件触发后 24 小时触发。
  • 如果用户在最后一次 idle-daily 事件触发后至少空闲了 3 分钟(对于 24-48 小时)或 1 分钟(对于超过 48 小时),它才会触发。

这意味着每次存储清除之间至少有 24 小时,并且只有在浏览器空闲时才会清除存储。 在清除 Cookie 时,出于性能原因,我们按创建时间对 Cookie 进行排序,并将它们批量分成 100 个集合(由首选项 privacy.purge_trackers.max_purge_count 控制)。

调试

可以通过在 about:config 中切换 privacy.purge_trackers.enabled 首选项来启用或禁用重定向跟踪保护。 此外,只有当 network.cookie.cookieBehavior 首选项在 Firefox 79 及更高版本中设置为 45 时,它才会运行(在 Firefox 80 及更高版本中为 1345)。

可以通过 privacy.purge_trackers.logging.level 首选项设置不同的日志级别。

为了调试目的,最简单的方法是通过 浏览器控制台命令行 直接触发服务来触发存储清除。 请注意,这与您可能用于调试网站的常规 Web 控制台 不同,并且要求将 devtools.chrome.enabled 首选项设置为 true 才能以交互方式使用它。 一旦您启用了浏览器控制台,就可以通过运行以下命令来触发存储清除

js
await Components.classes["@mozilla.org/purge-tracker-service;1"]
  .getService(Components.interfaces.nsIPurgeTrackerService)
  .purgeTrackingCookieJars();

可以使用 privacy.userInteraction.expiration 首选项将用户交互权限过期的时间设置为更短的时间。 请注意,您需要在访问要测试的网站之前设置此首选项——它不会追溯应用。

其他实现

WebKit 首次在 ITP 2.0 中发布了重定向跟踪保护(他们将相同的攻击称为弹跳跟踪)。 截至 2020 年 7 月,WebKit 的实现与 Firefox 的实现之间存在一些重大差异

  • Firefox 中要清除的来源列表基于我们的 跟踪保护列表;WebKit 依赖于 ITP 的分类。
  • Firefox 对“交互”的定义包括用户在以第一方身份访问来源时滚动;WebKit 没有包含此定义。
  • 如果来源在过去的 45 天日历时间内以第一方身份收到了交互,则 Firefox 不会清除其数据;WebKit 的交互窗口为 30 天浏览器使用时间(例如,用户至少与 Safari 交互过一天的时间)。