為防止某些類型的端管道跨網站追蹤,Chrome 已在第三方內容中分割大部分儲存空間和通訊 API。
導入狀態
這項功能已為 Chrome 115 以上版本的所有使用者啟用。儲存空間分區提案歡迎進一步討論。
什麼是儲存空間分區?
為防止某些類型的端管道跨網站追蹤,Chrome 會在第三方內容中分割儲存空間和通訊 API。
在沒有儲存空間分割的情況下,網站可以彙整不同網站的資料,以便在網路上追蹤使用者。此外,嵌入式網站還可使用側通道技術 (例如時間攻擊、XS-Leaks 和 COSI),推斷頂層網站中使用者的特定狀態。
過去,儲存空間的索引鍵只會根據來源建立。也就是說,如果 example.com
的 iframe 嵌入 a.com
和 b.com
,則系統可以透過儲存並成功從儲存空間擷取 ID,瞭解您在這些網站上的瀏覽習慣。啟用第三方儲存空間分區後,example.com
的儲存空間會位於兩個不同的分區,一個用於 a.com
,另一個用於 b.com
。
一般來說,分割作業是指儲存空間 API 儲存的資料 (例如本機儲存空間和 iframe 的 IndexedDB) 不再可供同一個來源的所有情境存取。相反地,只有具有相同來源和相同頂層網站的內容才能使用這項資料。
鏈結 iframe 上的儲存空間分區
當 iframe 包含 iframe 時,情況就會變得更複雜。尤其是當相同來源出現在鏈結的多個位置時。
舉例來說,A1 包含 B 的 iframe,而 B 包含 A2 的 iframe,且 A1 和 A2 都位於同一網站。如果我們在劃分時只考量頂層和目前層級的內容,那麼 iframe A2 可視為第一方,因為它與頂層 (A1) 位於同一網站,即使有第三方 iframe (B) 介入。如果 A2 預設可存取未分割的儲存空間,可能會讓 A2 面臨點按盜用等安全性風險。
為解決這個問題,Chrome 會在儲存空間分割鍵中加入額外的「祖系位元」,如果目前情境與頂層情境之間的任何文件是跨網站至目前情境,系統就會設定這個位元。在這種情況下,網站 B 是跨網站,因此會為 A2 設定位元,並將儲存空間從 A1 分割。
如果鏈結中沒有跨網站背景資訊,儲存空間就不會分割。舉例來說,網站 A1 包含 A2 的 iframe,而 A2 又包含 A3 的 iframe,因此系統不會為 A1、A2 和 A3 劃分區塊,因為這些網站都位於同一網站。
對於需要跨鏈結 iframe 存取的網站,Chrome 正在實驗擴充 Storage Access API 以支援此用途。由於 Storage Access API 要求框架網站明確叫用 API,因此可降低點擊劫持風險。
更新的 API
受分割影響的 API 可分為下列幾類:
Storage API
- Web Storage API
- Web Storage API 提供機制,讓瀏覽器儲存鍵/值組合。有兩種機制:本機儲存空間和工作階段儲存空間。目前並未受配額管理,但仍會進行分割。
- Origin 私人檔案系統
- 檔案系統存取權 API 可讓網站在使用者授予存取權後,直接讀取或儲存裝置上的檔案和資料夾變更。來源私人檔案系統可讓來源將私人內容儲存至磁碟,方便使用者存取,並且會分割。
- Storage Bucket API
- Storage Bucket API 是為 Storage Standard 開發的,可透過名為值區的新概念,整合各種儲存空間 API,例如 IndexedDB 和 localStorage。值區中儲存的資料和與值區相關聯的中繼資料會分割。
- Clear-Site-Data 標頭
- 在回應中加入
Clear-Site-Data
標頭,可讓伺服器要求清除儲存在使用者瀏覽器中的資料。您可以清除快取、Cookie 和 DOM 儲存空間。使用標頭只會清除一個分區內的儲存空間。
通訊 API
除了儲存空間 API 外,允許一個情境跨來源邊界進行通訊的通訊 API 也會分割。這項變更主要會影響允許透過廣播或同源會面來探索其他情境的 API。
對於下列通訊 API,第三方 iframe 將無法再與同來源內容互動:
- SharedWorker
- SharedWorker API 提供可跨同源瀏覽內容存取的工作站。
- 網頁封鎖功能
- Web Locks API 可讓在同一個來源的一個分頁或 worker 中執行的程式碼,在執行某些工作時取得共用資源的鎖定。
Service Worker API
Service Worker API 提供介面,可在背景執行工作。網站會建立持久註冊,以便建立新的 worker 內容,以便回應事件,而 worker 可以與任何相同來源內容進行通訊。此外,Service Worker API 還能變更導覽要求的時間,導致跨網站資訊洩漏的可能性,例如瀏覽記錄嗅探。
因此,從第三方內容註冊的 Service Worker 會分割。
擴充功能 API
擴充功能是可讓使用者自訂瀏覽體驗的程式。
擴充功能頁面 (含有 chrome-extension://
配置的頁面) 可嵌入網際網路上的網站,在這種情況下,這些頁面仍可存取其頂層區隔。這些頁面也可以嵌入其他網站,只要擴充功能具有該網站的主機權限,這些網站就能存取其頂層分區。
詳情請參閱擴充功能說明文件。
示範:測試儲存空間分區
示範網站:https://storage-partitioning-demo-site-a.glitch.me/

本示範使用兩個網站:網站 A 和網站 B。
- 當您在頂層情境中造訪網站 A 時,該網站會使用各種儲存方法設定資料。
- 網站 B 嵌入網站 A 的網頁,而該嵌入內容會嘗試讀取先前設定的儲存選項。
- 當網站 A 嵌入網站 B 時,如果儲存空間已分割,則網站 A 無法存取該資料,因此讀取作業會失敗。
- 這個示範會根據每次讀取的成功或失敗結果,顯示資料是否已分區。
目前,您可以使用 --disable-features=ThirdPartyStoragePartitioning
指令列切換鈕,在 Chrome 中關閉儲存空間分割功能。
您也可以以相同方式測試其他瀏覽器,查看其分割區狀態。
互動及分享意見回饋
- GitHub:閱讀原始提案,提出問題並參與討論。
- 開發人員支援:在 Privacy Sandbox 開發人員支援存放區中提問及參與討論。
- 回報錯誤:如果您認為某些功能無法正常運作,請在 Chromium 追蹤器中回報錯誤。