iFrame ohne Anmeldedaten: Einfache Einbettung von iFrames in COEP-Umgebungen

Arthur Sonzogni
Arthur Sonzogni

Entwickler, die COEP verwenden, können jetzt Drittanbieter-iFrames einbetten, die COEP nicht selbst verwenden.

iFrame ohne Anmeldedaten ist ab Chrome-Version 110 standardmäßig aktiviert. Damit wird die Lösung gelöst, die die häufigsten Beschwerden von Entwicklern, die mit der Cross-Origin-Embedder-Policy (COEP) arbeiten, gelöst haben, indem sie Drittanbieter-iFrames einbetten, für die COEP nicht festgelegt ist.

Warum wir COEP brauchen

Einige Web-APIs erhöhen das Risiko von Seitenkanalangriffen wie Spectre. Um dieses Risiko zu minimieren, bieten Browser eine isolierte, auf Opt-in-Basis basierende Umgebung namens ursprungsübergreifende Isolierung, für die COEP bereitgestellt wird. Mit der ursprungsübergreifenden Isolierung können Websites privilegierte Funktionen wie SharedArrayBuffer, performance.measureUserAgentSpecificMemory() und genaue Timer mit besserer Auflösung verwenden.

Um die ursprungsübergreifende Isolierung zu aktivieren, müssen Websites die folgenden HTTP-Header senden:

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

Als Alternative zu require-corp kann auch COEP:credentialless verwendet werden. Weitere Informationen finden Sie in der Dokumentation.

Herausforderungen bei der Aktivierung von COEP

Die ursprungsübergreifende Isolierung bietet Webseiten mehr Sicherheit und bietet die Möglichkeit, leistungsstarke Funktionen zu aktivieren. Die Bereitstellung von COEP kann jedoch schwierig sein. Eine der größten Herausforderungen besteht darin, dass alle ursprungsübergreifenden iFrames COEP und CORP bereitstellen müssen. iFrames ohne diese Header werden nicht vom Browser geladen.

Die Lösung ohne Anmeldedaten ist ein iFrame

Wir führen <iframe credentialless> ein, um das Einbetten von Drittanbieter-iFrames zu ermöglichen, die COEP nicht festlegen. Wenn Sie das Attribut credentialless zum Element <iframe> hinzufügen, wird der iFrame aus einem anderen, leeren Kontext geladen. Insbesondere wird sie ohne Cookies geladen. Dadurch kann die COEP-Einschränkung aufgehoben werden.

Beispiel:

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

Dieser iFrame wird in einem neuen sitzungsspezifischen Kontext erstellt und hat keinen Zugriff auf Cookies, die mit der Website der obersten Ebene verknüpft sind. Stattdessen beginnt sie mit einem leeren Cookie-Container. Ebenso laden und speichern Speicher-APIs wie LocalStorage, CacheStorage, IndexedDB usw. Daten in die neue sitzungsspezifische Partition. Die Partition bezieht sich sowohl auf das aktuelle Dokument der obersten Ebene als auch auf den Ursprung des iFrames. Der gesamte Speicherplatz wird gelöscht, nachdem das Dokument der obersten Ebene entladen wurde.

iFrames ohne Anmeldedaten unterliegen nicht den COEP-Einbettungsregeln. Sie sind weiterhin sicher: Da sie jedes Mal aus einem neuen, leeren Kontext geladen werden, sollten sie keine personalisierten Daten enthalten, was Angreifer suchen. Wenn ein iFrame nur öffentliche Daten enthält, ist er für einen Angreifer nicht wertvoll.

Demo

Sehen Sie sich eine Demo eines iFrames ohne Anmeldedaten an.

Häufig gestellte Fragen

Wird diese Funktion auch in anderen Browsern eingeführt?

Ist ein <iframe> innerhalb eines <iframe credentialless> ohne Anmeldedaten verschachtelt?

Ja. Sie wird übernommen. Sobald ein iFrame ohne Anmeldedaten ist, gilt dies für alle iFrames in der gesamten Unterstruktur, auch wenn kein credentialless-Attribut vorhanden ist.

Werden Pop-ups auch aus <iframe credentialless> ohne Anmeldedaten erstellt?

Pop-ups werden geöffnet, als ob noopener festgelegt wäre. Sie werden in einem neuen regulären Kontext auf oberster Ebene erstellt und haben keine Anmeldedaten. Sie können nicht mit dem iFrame ohne Anmeldedaten kommunizieren.

Erkennen, ob ein Dokument in einen iFrame ohne Anmeldedaten eingebettet wurde

window.credentialless ist in einem iFrame ohne Anmeldedaten „true“, andernfalls „false“. In einem Webbrowser, der <iframe credentialless> nicht unterstützt, lautet der Wert undefined.

Ressourcen