使用 COEP 的開發人員現在可以嵌入未使用 COEP 的第三方 iframe。
自 Chrome 110 版起,系統預設啟用 iframe 無憑證式服務。能解決與 Cross-Origin-Embedder-Policy (COEP) 政策合作的最常見申訴開發人員:嵌入未設定 COEP 的第三方 iframe。
我們需要 COEP 的原因
有些網路 API 會增加旁路攻擊的風險,例如 Spectre。為降低這種風險,瀏覽器提供了名為跨來源隔離的選擇性獨立環境,而這類環境必須部署 COEP。跨來源隔離可讓網站使用特殊權限功能,包括 SharedArrayBuffer
、performance.measureUserAgentSpecificMemory()
和解析度更佳的高精確度計時器。
如要啟用跨來源隔離,網站必須傳送下列 HTTP 標頭:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
COEP:無憑證 也能做為 require-corp
的替代選項。詳情請參閱說明文件。
啟用 COEP 時會面臨的挑戰
雖然跨來源隔離可提高網頁安全性並啟用強大功能,但部署 COEP 並不容易。最大的挑戰之一在於,所有跨來源 iframe 都必須部署 COEP 和 CORP。瀏覽器不會載入不含這些標題的 Iframe。
不需認證的 iframe
我們將導入 <iframe credentialless>
來協助嵌入未設定 COEP 的第三方 iframe。只要將 credentialless
屬性新增至 <iframe>
元素,iframe 就會從另一個空白的內容載入。而且特別能夠在沒有 Cookie 的情況下載入。如此一來,就能移除 COEP 限制。
範例:
<iframe credentialless src="https://example.com">
這個 iframe 是在新的暫時內容中建立,無法存取與頂層網站相關的任何 Cookie。而是以空白的餅乾罐頭回應。同樣地,LocalStorage、CacheStorage、IndexedDB 等 Storage API 也會在新的暫時分區中載入及儲存資料。分區的範圍僅限於目前的頂層文件和 iframe 的來源。當頂層文件卸載時,系統會清除這個儲存空間的所有資料。
無憑證 iframe 不適用 COEP 嵌入規則。它們仍是安全的:因為它們每次都會從新的空白內容載入,因此它們不能包含個人化資料,而這就是攻擊者的意圖。如果 iframe 只包含公開資料,對攻擊者而言沒有價值。
示範
您可以查看無憑證 iframe 的示範。
常見問題
其他瀏覽器也會採用這項功能嗎?
<iframe>
是否以巢狀結構形式置於 <iframe credentialless>
無憑證中?
可以。資源會在內部沿用。iframe 沒有憑證資訊後,就會套用至整個子樹狀結構中的所有 iframe (即使沒有 credentialless
屬性)。
是否也會透過 <iframe credentialless>
無憑證的彈出式視窗建立彈出式視窗?
彈出式視窗開啟方式與設定 noopener
時相同。它們會在新的一般頂層情境中建立,且不是無憑證資訊。無法與無憑證 iframe 通訊。
如何偵測文件已嵌入無憑證 iframe?
在無憑證 iframe 中,window.credentialless
為 true,否則為 false。在不支援 <iframe credentialless>
的網路瀏覽器中,其值為 undefined
。