使用 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 網站上提供