使用 COEP:無憑證功能載入不含 CORP 標頭的跨來源資源

由第三方提供的跨源資源通常不含適當的 CORP 標頭。如果可在沒有憑證的情況下要求這些憑證,您現在可以透過標示這類憑證的方式啟用跨來源隔離功能。

我們已推出新的跨源嵌入程式政策 (COEP) 值 credentialless,允許瀏覽器藉由傳送不含憑證 (例如 Cookie) 的要求,載入不使用跨來源資源政策 (CORP) 的跨來源資源。這可讓開發人員更輕鬆地採用跨來源隔離。

為什麼需要跨來源隔離

部分網路 API 會增加旁路攻擊 (例如 Spectre) 的風險。為減輕風險,瀏覽器提供以選擇加入為基礎的隔離環境,稱為跨來源隔離。有了跨來源隔離狀態,網頁可以使用特殊權限功能,包括 SharedArrayBufferperformance.measureUserAgentSpecificMemory()解析度更高的計時器,同時將來源與其他來源區隔開來 (除非使用者選擇這麼做)。

網頁必須傳送兩個 HTTP 標頭,才能啟用跨來源隔離:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

如果使用跨來源隔離狀態,所有跨來源資源都必須透過 CORS 提供,或是設定要載入的 Cross-Origin-Resource-Policy 標頭。

啟用跨來源隔離的難題

雖然跨來源隔離可提高網頁安全性,且能啟用強大功能,但部署方式可能很難。其中一項最大的挑戰是必須為所有跨來源資源啟用 CORS 或 CORP。瀏覽器不會在跨來源隔離的頁面中載入不含這些標頭的資源。

這些跨來源資源通常是由第三方提供,但這類資源可能較不容易新增必要的標頭。

但是,如果確定資源安全足以載入,該怎麼辦?事實上,唯一面臨風險的資源是使用憑證要求的資源,因為這些資源可能包含機密資訊,而攻擊者無法自行載入。這表示可在沒有憑證的情況下要求的資源,不僅可供公開存取,而且可安全載入。

取得救援:credentialless

這時 COEP: credentialless 就能派上用場。credentiallessCross-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 載入而沒有憑證。

其他瀏覽器是否會採用這項功能?

即將推出的功能

為了減少與跨來源隔離相關的其他難題,我們即將推出兩項更新:

因上述障礙而註冊 Chrome 來源試用以延長 SharedArrayBuffer 變更的使用者可能會想知道系統終止時間。我們原已公告將在 Chrome 96 版中終止這項功能,但我們已決定將這項功能延後到 Chrome 106 版。

資源

相片來源:Martin Adams Unsplash 網站上