無憑證 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:credentialless 也可做為 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。而是以空白的 Cookie jar 為開頭。同樣地,LocalStorageCacheStorageIndexedDB 等 Storage API 也會在新的臨時分區中載入及儲存資料。分區的範圍同時限定於目前頂層文件和 iframe 的來源。一旦卸載頂層文件,系統就會清除這個所有儲存空間。

無憑證 iframe 不適用 COEP 嵌入規則。但仍很安全:由於它們每次都會從新的空白內容載入,因此不應包含個人化資料,而這就是攻擊者的用途。如果 iframe 僅包含公開資料,這對攻擊者來說毫無價值。

操作示範

您可以查看無憑證 iframe 示範

常見問題

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

<iframe> 的巢狀結構是否在 <iframe credentialless> 內無憑證?

是的。繼承資料。一旦 iframe 沒有憑證,就會套用至整個子樹狀結構中的所有 iframe,即使沒有 credentialless 屬性也一樣。

彈出式視窗是否也來自 <iframe credentialless> 的未認證?

彈出式視窗會以 noopener 的設定模式開啟。這些執行個體在新的一般頂層環境中建立,並非無憑證。無法與無憑證的 iframe 通訊。

如何偵測文件是否已嵌入無認證的 iframe?

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

資源