使用 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: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 為開頭。同樣地,LocalStorage、CacheStorage、IndexedDB 等 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
。