第三方提供的跨原始來源資源通常不會包含足夠的 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
類似,這項功能可啟用跨來源隔離,但對於沒有 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 來源測試註冊者可能會想知道何時會終止。我們原本宣布會在 Chrome 96 中終止這項功能,但現在決定將這項功能的終止時間延後至 Chrome 106。
資源
- 使用 COOP 和 COEP 讓網站「跨來源隔離」
- 為何需要「跨來源隔離」功能才能使用強大的功能
- 跨來源隔離啟用指南
- Android Chrome 88 和 Chrome 92 中的 SharedArrayBuffer 更新
相片來源:Martin Adams 在 Unsplash 網站上提供