重定向跟踪保护
从 79 版开始,Firefox 通过定期清除已知跟踪器设置的 Cookie 和网站数据来保护用户免受 **重定向跟踪** 的侵害。 只有当用户 阻止跟踪 Cookie (即,network.cookie.cookieBehavior
首选项设置为 4
)时,才会从存储中清除这些数据。
其他 Cookie 策略的支持由 Bug 1643045 跟踪。
重定向跟踪定义
重定向跟踪是对跨站点导航的滥用,跟踪器会暂时将用户重定向到其网站,以便使用第一方存储来跨网站跟踪该用户。
跨站点导航是 Web 的核心功能;一个人可能在搜索引擎上搜索“最佳跑步鞋”,点击搜索结果阅读评论,最后点击链接从在线商店购买一双鞋。 过去,这些网站中的每一个都可能嵌入来自同一个跟踪器的资源,而跟踪器可以使用其 Cookie 将所有这些页面访问链接到同一个人。 为了保护用户的隐私,浏览器阻止跟踪器在第三方环境中使用 Cookie(例如,请参见 Firefox 的 增强型跟踪保护 (ETP)),但仍然允许它们作为第一方使用 Cookie,因为阻止第一方 Cookie 会导致网站中断。 重定向跟踪利用这一点来规避第三方 Cookie 阻止。
重定向跟踪器通过强制您在这段旅程中进行一次不可察觉的、短暂的停留到其网站,来实现其目的。 因此,您不会直接从评论网站导航到零售商,而是会先导航到重定向跟踪器,然后才能导航到零售商。 这意味着跟踪器作为第一方加载。 重定向跟踪器会将其存储在其第一方 Cookie 中的标识符与跟踪数据关联,然后将您转发到零售商。
清除哪些来源?
如果满足以下条件,则会清除来源
- 它在过去 72 小时内存储了 Cookie 或访问了其他网站存储(例如,localStorage、IndexedDB 或 Cache API)。 由于 Cookie 是针对每个主机,因此我们将清除 Cookie 主机的
http
和https
来源变体。 - 该来源在我们的跟踪保护列表中 被归类为跟踪器。
- 没有与相同基础域名 (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 及更高版本中设置为 4
或 5
时,它才会运行(在 Firefox 80 及更高版本中为 1
、3
、4
或 5
)。
可以通过 privacy.purge_trackers.logging.level
首选项设置不同的日志级别。
为了调试目的,最简单的方法是通过 浏览器控制台命令行 直接触发服务来触发存储清除。 请注意,这与您可能用于调试网站的常规 Web 控制台 不同,并且要求将 devtools.chrome.enabled
首选项设置为 true
才能以交互方式使用它。 一旦您启用了浏览器控制台,就可以通过运行以下命令来触发存储清除
await Components.classes["@mozilla.org/purge-tracker-service;1"]
.getService(Components.interfaces.nsIPurgeTrackerService)
.purgeTrackingCookieJars();
可以使用 privacy.userInteraction.expiration
首选项将用户交互权限过期的时间设置为更短的时间。 请注意,您需要在访问要测试的网站之前设置此首选项——它不会追溯应用。