重定向跟蹤保護

自 79 版本以來,Firefox 一直透過定期清除已知跟蹤器設定的 cookie 和站點資料來保護使用者免受 重定向跟蹤 的侵害。僅當用戶 阻止跟蹤 cookie(即 network.cookie.cookieBehavior 首選項設定為 4)時,才會從儲存中清除這些資料。

對其他 cookie 策略的支援由 Bug 1643045 進行跟蹤。

定義重定向跟蹤

重定向跟蹤是對跨站點導航的濫用,其中跟蹤器會短暫地將使用者重定向到其網站,目的是利用第一方儲存來跨網站跟蹤該使用者。

跨站點導航是 Web 的核心功能;一個人可能會在搜尋引擎中搜索“最佳跑鞋”,點選搜尋結果閱讀評論,最後點選連結從線上商店購買一雙鞋。過去,這些網站都可以嵌入同一個跟蹤器的資源,而跟蹤器可以使用其 cookie 將所有這些頁面訪問連結到同一個人。為了保護使用者的隱私,瀏覽器會阻止跟蹤器在使用第三方上下文(例如,請參閱 Firefox 的 增強跟蹤保護 (ETP))時使用 cookie,但仍允許它們作為第一方使用 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 推送通知
  • Reporting API 報告
  • 安全設定(例如 HSTS)
  • EME 媒體外掛資料
  • 外掛資料(例如 Flash)
  • 媒體裝置
  • 授予源的儲存訪問許可權
  • HTTP 身份驗證令牌
  • HTTP 身份驗證快取

注意: 儘管我們正在清除所有這些資料,但目前僅當跟蹤器使用 cookie 或其他站點儲存時,我們才會將其標記為清除。

儲存清除會忽略源屬性。這意味著儲存將在 容器 和隔離儲存(即,來自 第一方隔離)之間進行清除。

多久清除一次資料?

Firefox 根據名為 idle-daily 的內部事件的觸發來清除儲存,該事件由以下條件定義

  • 它最早在上次 idle-daily 事件觸發後 24 小時觸發。
  • 僅當用戶至少空閒 3 分鐘(在上次 idle-daily 事件後的 24-48 小時內)或 1 分鐘(在上次 idle-daily 事件後的 >48 小時內)時才會觸發。

這意味著每次儲存清除之間至少有 24 小時,並且僅當瀏覽器空閒時才會清除儲存。清除 cookie 時,我們會按建立日期對 cookie 進行排序,並出於效能原因將它們分批處理為 100 個一組(由首選項 privacy.purge_trackers.max_purge_count 控制)。

除錯

可以透過在 about:config 中切換 privacy.purge_trackers.enabled 首選項來啟用或停用重定向跟蹤保護。此外,僅當 Firefox 79+ 版本中 network.cookie.cookieBehavior 首選項設定為 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 互動過一次的日期)。