由第三方提供的跨源資源通常不含適當的 CORP 標頭。如果可在沒有憑證的情況下要求這些憑證,您現在可以透過標示這類憑證的方式啟用跨來源隔離功能。
我們已推出新的跨源嵌入程式政策 (COEP) 值 credentialless
,允許瀏覽器藉由傳送不含憑證 (例如 Cookie) 的要求,載入不使用跨來源資源政策 (CORP) 的跨來源資源。這可讓開發人員更輕鬆地採用跨來源隔離。
為什麼需要跨來源隔離
部分網路 API 會增加旁路攻擊 (例如 Spectre) 的風險。為減輕風險,瀏覽器提供以選擇加入為基礎的隔離環境,稱為跨來源隔離。有了跨來源隔離狀態,網頁可以使用特殊權限功能,包括 SharedArrayBuffer
、performance.measureUserAgentSpecificMemory()
和解析度更高的計時器,同時將來源與其他來源區隔開來 (除非使用者選擇這麼做)。
網頁必須傳送兩個 HTTP 標頭,才能啟用跨來源隔離:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
如果使用跨來源隔離狀態,所有跨來源資源都必須透過 CORS 提供,或是設定要載入的 Cross-Origin-Resource-Policy
標頭。
啟用跨來源隔離的難題
雖然跨來源隔離可提高網頁安全性,且能啟用強大功能,但部署方式可能很難。其中一項最大的挑戰是必須為所有跨來源資源啟用 CORS 或 CORP。瀏覽器不會在跨來源隔離的頁面中載入不含這些標頭的資源。
這些跨來源資源通常是由第三方提供,但這類資源可能較不容易新增必要的標頭。
但是,如果確定資源安全足以載入,該怎麼辦?事實上,唯一面臨風險的資源是使用憑證要求的資源,因為這些資源可能包含機密資訊,而攻擊者無法自行載入。這表示可在沒有憑證的情況下要求的資源,不僅可供公開存取,而且可安全載入。
取得救援:credentialless
這時 COEP: credentialless
就能派上用場。credentialless
是 Cross-Origin-Embedder-Policy
標頭的新值。與 require-corp
類似,可啟用跨來源隔離,但不需要要求 no-cors 跨來源要求使用 CORP:cross-origin
標頭,而是在不使用憑證 (例如 Cookie) 的情況下傳送。
您可以使用下列兩個標頭,也可以啟用跨來源隔離:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
這表示要求的跨來源伺服器無法以機密資源回應,且要求者可以一律假設回應僅包含可公開取得的資訊。
這項做法也與瀏覽器逐步淘汰第三方 Cookie 所做的計畫一致。
操作示範
您可以嘗試以下示範的各種標頭選項:https://cross-origin-isolation.glitch.me
常見問題
我可以在 credentialless
環境中傳送憑證要求嗎?
當然,變更要求模式以要求回應須進行 CORS 檢查,但成本肯定會降低。如果是 <audio>
、<img>
、<link>
、<script>
和 <video>
等 HTML 標記,只要明確附加 crossorigin="use-credentials"
以通知瀏覽器傳送憑證要求即可。
舉例來說,即使 https://www.example.com
上的文件具有 Cross-Origin-Embedder-Policy: credentialless
標頭,<img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
仍會傳送憑證要求。
如果是 fetch()
API,可以使用 request.mode = 'cors'
。
在提供 COEP: credentialless
的情況下,「COEP: require-corp
」對我的網站有幫助嗎?
如果某些跨來源子資源需要使用 Cookie,COEP: require-corp
不會要求您手動將要求模式切換為 CORS。
我還可以在 credentialless
環境下載入不含特殊標頭的跨來源 iframe 嗎?
否。在 credentialless
環境下載入跨來源 iframe,仍需與 require-corp
相同。iframe 文件需要提供以下兩個標頭:
Cross-Origin-Embedder-Policy: credentialless
(或require-corp
)Cross-Origin-Resource-Policy: cross-origin
好消息是,目前已有持續討論,說明如何透過提供 iframe 的 crossorigin="anonymous"
,允許在沒有標頭的情況下載入跨來源 iframe。這樣可在沒有標頭的情況下,跨來源 iframe 載入而沒有憑證。
其他瀏覽器是否會採用這項功能?
- Firefox 追蹤問題
- Webkit 位置要求:無訊號
- W3C TAG 位置要求:待處理
即將推出的功能
為了減少與跨來源隔離相關的其他難題,我們即將推出兩項更新:
因上述障礙而註冊 Chrome 來源試用以延長 SharedArrayBuffer 變更的使用者可能會想知道系統終止時間。我們原已公告將在 Chrome 96 版中終止這項功能,但我們已決定將這項功能延後到 Chrome 106 版。
資源
- 使用 COOP 和 COEP 讓網站「跨來源隔離」
- 為什麼需要「跨來源隔離」才能使用強大功能
- 跨來源隔離啟用指南
- Android Chrome 88 和電腦版 Chrome 92 的 SharedArrayBuffer 更新
相片來源:Martin Adams Unsplash 網站上