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

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