使用 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 類似,它可以啟用跨來源隔離功能,但不必為無 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 來源測試註冊者可能會想知道何時會終止。我們原本宣布會在 Chrome 96 中終止這項功能,但現在決定將這項功能的終止時間延後至 Chrome 106。

資源

相片來源:Martin AdamsUnsplash 網站上提供