無憑證 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。只要在 <iframe> 元素中加入 credentialless 屬性,即可從不同的空白內容載入 iframe。特別是,無需 Cookie 即可載入。這樣一來,即可移除 COEP 限制。

範例:

<iframe credentialless src="https://example.com">

這個 iframe 是在新的暫時性內容中建立,因此無法存取與頂層網站相關聯的任何 Cookie。而是從空的 Cookie Jar 開始。同樣地,儲存空間 API (例如 LocalStorageCacheStorageIndexedDB 等) 也會在新的暫時性區隔中載入及儲存資料。此區隔的範圍涵蓋目前的頂層文件和 iframe 來源。頂層文件卸載後,系統會清除所有這類儲存空間。

無憑證 iframe 不受 COEP 嵌入規則的約束。這些 cookie 仍是安全的,因為每次都是從新的空白內容載入,因此不應包含攻擊者所需的個人化資料。如果 iframe 只包含公開資料,對攻擊者來說就沒有價值。

示範

您可以查看無憑證 iframe 的示範

常見問題

其他瀏覽器會採用這項功能嗎?

<iframe> 是否已巢狀在 <iframe credentialless> 無憑證的內容中?

可以。這是繼承的。一旦 iframe 為無憑證狀態,即使沒有 credentialless 屬性,也會套用至整個子樹狀結構中的所有 iframe。

是否也能透過 <iframe credentialless> 無憑證建立彈出式視窗?

彈出式視窗會以 noopener 的設定開啟。這些服務會在新的一般頂層內容中建立,並非無憑證。無法與無憑證 iframe 通訊。

如何偵測文件已嵌入無憑證 iframe?

window.credentialless 在無憑證 iframe 內為 true,否則為 false。在不支援 <iframe credentialless> 的網路瀏覽器中,其值為 undefined

資源