從 Chrome 135 開始,您可以使用新的 sandbox 值:
allow-same-site-none-cookies。如果指定這項政策,且無法使用第三方 Cookie,瀏覽器只會在源自第一方沙箱 iframe 的 HTTP 要求中傳送 SameSite=None Cookie。
什麼是沙盒化 iframe?
沙箱化 iframe 是指設有特殊限制的 iframe。系統會將這些來源視為具有null不透明來源。根據預設,沙箱 iframe 不支援指令碼、表單和彈出式視窗等可能有害的功能。
使用 sandbox 屬性指定沙箱化 iframe 應具備哪些功能。例如:
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
建議您一律使用沙箱,因為這樣可以精細地選取嵌入內容成功載入所需的權限,同時限制潛在的攻擊範圍。
為什麼需要這項新政策?
allow-same-site-none-cookies推出前,您可以在沙箱化 iframe 中設定兩種 Cookie 情境:
- 如果
sandbox屬性中沒有allow-same-origin權杖,iframe 的來源會序列化為null,導致來自沙箱網頁的所有要求都屬於跨網站要求。在這種情況下,要求只會包含具有SameSite=None的 Cookie。 - 在
sandbox屬性中使用allow-same-origin權杖,要求就會視為來自 iframe 的實際來源,因此可傳送任何SameSite值的 Cookie。
封鎖第三方 Cookie 後,如果沙箱化 iframe 缺少 allow-same-origin,就無法傳送任何 Cookie,除非您啟用 allow-same-site-none-cookies。
即使第三方 Cookie 遭到封鎖,含有 allow-same-origin 的 iframe 仍可在同網站要求中加入 Cookie。不過,整個來源的 Cookie 罐會暴露於潛在的惡意網路活動。
使用 allow-same-site-none-cookies 時,iframe 可以在 HTTP 要求中傳送 SameSite=None Cookie,但不會納入可能含有敏感資訊的 SameSite=Strict 和 SameSite=Lax Cookie。
實際範例
假設有個網站 practice-coding.example,可讓使用者建立及執行自訂程式設計專案,並嵌入其他使用者的程式碼。如要使用這項服務,使用者必須登入,系統會設定 SameSite=Strict 工作階段 Cookie。
其他使用者建立專案 practice-coding.example/cookie-theft,其他使用者可能會在不知情的情況下,將該專案以 iframe 形式嵌入自己的專案。如果 SameSite=Strict 和 SameSite=Lax Cookie 暴露在 practice-coding.example/cookie-theft iframe 中,惡意使用者可能會竊取其他使用者的工作階段 Cookie。
在這種情況下,網站擁有者可能會想限制存取可能含有私密資訊的 Cookie。不過,他們可能仍想在沙箱化 iframe 中允許 SameSite=None Cookie。舉例來說,practice-coding.example/coding-interview沙箱化 iframe 可能需要 SameSite=None Cookie,才能讓應試者重新查看自己的程式碼。allow-same-site-none-cookies 可防止公開整個 Cookie 罐,同時選擇性地允許必要的 SameSite=None Cookie。
如何只允許第一方沙箱框架內的 SameSite=None?
如要在來自第一方沙箱網頁的要求中啟用 SameSite=None Cookie,請在 iframe 代碼中指定 allow-same-site-none-cookies 權杖。例如:
<iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>
您也可以使用 Content-Security-Policy HTTP 標頭設定 allow-same-site-none-cookies 政策:
Content-Security-Policy: sandbox allow-same-site-none-cookies;
歡迎透過我們的試用版親身體驗。
參與討論及分享意見
如要分享意見回饋或回報問題,請提出問題,或加入 GitHub 上的討論。