無憑證 iframe:輕鬆在 COEP 環境中嵌入 iframe

Arthur Sonzogni
Arthur Sonzogni

使用 COEP 的開發人員現在可以嵌入未使用 COEP 的第三方 iframe。

自 Chrome 110 版起,系統預設啟用 iframe 無憑證式服務。能解決與 Cross-Origin-Embedder-Policy (COEP) 政策合作的最常見申訴開發人員:嵌入未設定 COEP 的第三方 iframe。

我們需要 COEP 的原因

有些網路 API 會增加旁路攻擊的風險,例如 Spectre。為降低這種風險,瀏覽器提供了名為跨來源隔離的選擇性獨立環境,而這類環境必須部署 COEP。跨來源隔離可讓網站使用特殊權限功能,包括 SharedArrayBufferperformance.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。而是以空白的餅乾罐頭回應。同樣地,LocalStorageCacheStorageIndexedDB 等 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

資源