題目與使用情境
客服元件來自 support.example,會被 shop-a.example 和 shop-b.example 等頂級網站嵌入。元件需要在 shop-a.example 的商品頁、結帳頁和說明頁之間保留工作階段;使用者造訪 shop-b.example 時應得到隔離狀態。設計還要面對第三方 Cookie 預設受限、舊瀏覽器、登出、客服轉人工和多分頁並發。
面試官考察什麼
- 是否理解 CHIPS 以頂級網站和嵌入來源共同作為 Cookie 分區鍵。
- 能否區分「每個網站隔離的持久狀態」和需要使用者授權的未分區第三方狀態。
- 是否能把 Cookie 設計、伺服器工作階段、CSRF、防重放和登出流程連成完整資料流。
- 是否會處理能力偵測、舊瀏覽器降級、快取鍵和觀測指標。
作答前的釐清問題
先確認所有嵌入是否使用 HTTPS、元件是否必須跨頂級網站識別同一使用者、子網域是否需要共享工作階段,以及是否允許彈出頂級網站登入頁。再確認資料敏感級別、工作階段有效期、是否需要伺服器推送和目標瀏覽器範圍。若業務真的要求跨站統一身分,CHIPS 本身不符合該目標,應改用明確登入或授權流程。
30 秒回答框架
我會把工作階段定義為「頂級網站內的元件工作階段」。元件回應設定帶 Partitioned 的安全 Cookie,伺服器按頂級網站和元件工作階段解析狀態;同一網站的子網域共享該分區,另一網站得到不同分區。Cookie 不能承擔跨站身分,跨站登入改走頂級頁面授權。對不支援 CHIPS 的瀏覽器,預設無持久工作階段,使用短期記憶體狀態或顯式開啟元件網站完成授權。全鏈路驗證登出、CSRF、快取隔離和多分頁行為。
分步驟深入解答
- 定義信任邊界。 元件服務只把嵌入網站當作分區情境,不把
Origin字串直接當作授權結論。伺服器維護允許嵌入的網站清單,並校驗訊息來源、工作階段狀態和租戶。 - 設定分區 Cookie。 使用
Secure、合適的SameSite值和Partitioned屬性;需要繫結目前主機時優先使用__Host前綴。Cookie 的邏輯鍵由嵌入來源和頂級網站共同決定,同一元件在兩個頂級網站中不能讀取同一份 Cookie。 - 設計伺服器工作階段。 Cookie 只攜帶隨機不可讀識別碼,實際工作階段存放在伺服器,記錄租戶、頂級網站、建立時間、到期時間和撤銷版本。伺服器每次請求都重新校驗租戶與工作階段繫結,避免只依賴瀏覽器分區。
- 處理子網域和快取。 頂級網站的多個子網域可重用同一分區,但 HTML、腳本和 API 回應的快取鍵不能遺漏租戶或工作階段變化。個人化回應使用私有快取或明確的
Vary策略,禁止 CDN 把一個網站的元件狀態發給另一個網站。 - 設計登入和跨站授權。 需要識別同一使用者時,讓元件開啟伺服器的頂級頁面完成登入,再透過一次性、有時效的授權碼回傳。不要把長期令牌放在 URL、
postMessage或未分區 Cookie 中。 - 建立降級與觀測。 能力不足時以無工作階段模式運作,或提示使用者進行顯式授權;不能靜默恢復未分區第三方 Cookie。記錄分區 Cookie 命中率、授權成功率、工作階段建立和撤銷原因,但日誌不得包含 Cookie 值或使用者令牌。
高品質示範回答
我會把 CHIPS 用在「同一頂級網站內保持元件狀態」這個邊界。support.example 為嵌入請求設定 Secure、SameSite=None 和 Partitioned 的 Cookie,Cookie 只保存隨機工作階段識別碼;伺服器工作階段表還繫結租戶、頂級網站、到期時間和撤銷版本。元件在 shop-a.example 的多個子網域中重用同一分區,在 shop-b.example 中自然得到另一份狀態。
跨站統一登入不依賴該 Cookie。元件開啟頂級頁面完成登入,經使用者操作取得一次性授權碼,再透過受校驗的訊息通道換取目前分區的短期工作階段。舊瀏覽器或策略阻止分區 Cookie 時,元件顯示無工作階段體驗或引導顯式授權;不會回退到全域第三方 Cookie。驗收涵蓋兩個頂級網站、多個子網域、登出、到期、並發分頁、快取、CSRF、訊息偽造和瀏覽器隱私設定。依據包括 MDN 的 CHIPS 與 Storage Access API 文件,以及 Privacy Sandbox 的 CHIPS 說明。
常見錯誤
- 把
PartitionedCookie 當成跨站單點登入憑證,破壞分區隔離目標。 - 只檢查
Origin就授權,忽略租戶、工作階段撤銷、CSRF 和訊息重放。 - 不支援 CHIPS 時靜默使用未分區第三方 Cookie,導致狀態串站或被瀏覽器直接阻擋。
- 忽略 CDN、Service Worker 或代理快取鍵,把一個頂級網站的個人化回應重用給另一個網站。
- 把長期令牌放入 URL、
postMessage或前端可讀 Cookie,擴大洩露面。
追問及應對
CHIPS 與 Storage Access API 何時分別使用?
CHIPS 適合每個頂級網站獨立保存嵌入元件狀態;Storage Access API 用於確有業務理由、並願意讓使用者授權存取未分區第三方狀態的情境,例如顯式登入。兩者隱私邊界不同,不能互相當作無感替代。
如何證明兩個頂級網站的工作階段沒有串聯?
用相同瀏覽器分別嵌入元件,記錄兩個頂級網站的工作階段識別碼、伺服器租戶繫結和快取命中結果。清除一個網站的 Cookie、登出、開啟新分頁和切換子網域後,另一個網站的狀態都不應改變。
如果產品堅持跨站識別同一使用者怎麼辦?
把需求升級為明確的身分授權流程:頂級頁面登入、短期一次性授權碼、伺服器交換和可撤銷工作階段。記錄使用者同意和失敗原因,避免透過隱蔽的第三方追蹤狀態實現跨站關聯。