第三方提供的跨原始來源資源通常不會包含足夠的 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 網站上提供