自 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;
歡迎試用我們的示範。