Iframe-referentieloos: integreer iframes eenvoudig in COEP-omgevingen

Arthur Sonzogni
Arthur Sonzogni

Ontwikkelaars die COEP gebruiken, kunnen nu iframes van derden insluiten die zelf geen COEP gebruiken.

Iframe-referentieloos is standaard ingeschakeld vanaf Chrome-versie 110. Het lost de meest voorkomende klachten op die ontwikkelaars die werken met Cross-Origin-Embedder-Policy (COEP) hebben: iframes van derden insluiten die COEP niet instellen.

Waarom we COEP nodig hebben

Sommige web-API's vergroten het risico op zijkanaalaanvallen zoals Spectre . Om dat risico te beperken, bieden browsers een op opt-in gebaseerde geïsoleerde omgeving, genaamd cross-origin isolation , waarvoor COEP moet worden ingezet. Door cross-origin-isolatie kunnen websites bevoorrechte functies gebruiken, waaronder SharedArrayBuffer , performance.measureUserAgentSpecificMemory() en uiterst nauwkeurige timers met een betere resolutie .

Om cross-origin-isolatie mogelijk te maken, moeten websites de volgende HTTP-headers verzenden:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

COEP:credentialless kan ook worden gebruikt als alternatief voor require-corp . Zie de documentatie voor meer details.

Uitdagingen bij het inschakelen van COEP

Hoewel cross-origin-isolatie webpagina's een betere beveiliging biedt en de mogelijkheid biedt om krachtige functies in te schakelen, kan het implementeren van COEP moeilijk zijn. Een van de grootste uitdagingen is dat alle cross-origin iframes COEP en CORP moeten inzetten. Iframes zonder deze headers worden niet door de browser geladen.

Iframe credentialless schiet te hulp

We introduceren <iframe credentialless> om iframes van derden te helpen insluiten die geen COEP instellen. Door het credentialless attribuut aan het <iframe> element toe te voegen, wordt het iframe geladen vanuit een andere, lege context. In het bijzonder wordt het zonder cookies geladen. Hierdoor kan de COEP-beperking worden opgeheven.

Voorbeeld:

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

Dit iframe is gemaakt in een nieuwe kortstondige context en heeft geen toegang tot de cookies die zijn gekoppeld aan de website op het hoogste niveau. In plaats daarvan begint het met een lege koektrommel. Op dezelfde manier laden en bewaren opslag-API's zoals LocalStorage , CacheStorage , IndexedDB , enzovoort, gegevens in de nieuwe kortstondige partitie. De partitie is gericht op zowel het huidige document op het hoogste niveau als de oorsprong van het iframe. Al deze opslagruimte wordt gewist zodra het document op het hoogste niveau is verwijderd.

Credentialless iframes zijn niet onderworpen aan COEP-inbeddingsregels. Ze zijn nog steeds veilig: omdat ze elke keer vanuit een nieuwe, lege context worden geladen, mogen ze geen gepersonaliseerde gegevens bevatten, iets waar aanvallers op uit zijn. Als een iframe alleen openbare gegevens bevat, is het niet waardevol voor een aanvaller.

Demo

U kunt een demo bekijken van een iframe zonder referentie .

Veelgestelde vragen

Zal deze functie door andere browsers worden overgenomen?

Is een <iframe> genest in een <iframe credentialless> credentialless?

Ja. Het is geërfd. Zodra een iframe geen credentialless heeft, geldt dat voor alle iframes in de hele subboom, zelfs zonder een credentialless attribuut.

Worden er ook pop-ups gemaakt van <iframe credentialless> credentialless?

Pop-ups worden geopend alsof er noopener is ingesteld. Ze worden gemaakt in een nieuwe reguliere top-levelcontext en zijn niet credentialless. Ze kunnen niet communiceren met het iframe zonder legitimatie.

Hoe kan ik detecteren dat het document is ingebed in een iframe zonder legitimatie?

window.credentialless is waar binnen een credentialless iframe en anders false. De waarde ervan is undefined in een webbrowser die <iframe credentialless> niet ondersteunt.

Bronnen