Anonymer iFrame-Ursprungstest: Einfache Einbettung von iFrames in COEP-Umgebungen

Sonzogni
Arthur Sonzogni

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

Warum wir COEP brauchen

Einige Web-APIs erhöhen das Risiko von Seitenkanalangriffen wie Spectre. Um dieses Risiko zu verringern, bieten Browser eine isolierte, auf Opt-in-Basis basierende Umgebung namens ursprungsübergreifende Isolierung, für die unter anderem COEP erforderlich ist. Dadurch können Websites privilegierte Features wie SharedArrayBuffer, performance.measureUserAgentSpecificMemory() und hochpräzise Timer mit besserer Auflösung verwenden.

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

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

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 auch COEP und CORP bereitstellen müssen. iFrames ohne diese Header werden vom Browser nicht geladen.

Die iFrames werden normalerweise von einem Drittanbieter bereitgestellt, für den die COEP-Bereitstellung möglicherweise nicht einfach ist.

Anonymer iFrame zur Lösung

Hier kommt der anonyme iFrame ins Spiel. Durch Hinzufügen des anonymous-Attributs zum <iframe>-Element wird der iFrame aus einer anderen sitzungsspezifischen Speicherpartition geladen und unterliegt keinen COEP-Einschränkungen mehr.

Beispiel:

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

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

Anonyme iFrames unterliegen nicht den COEP-Einbettungsregeln. Dies ist weiterhin sicher, da sie jedes Mal aus einem neuen leeren Kontext geladen werden. Sie werden geladen, ohne dass ihre Daten personalisiert werden. Sie enthalten ausschließlich öffentliche Daten, die für einen Angreifer keinen Wert haben.

Demo

Einen anonymen iFrame finden Sie unter https://anonymous-iframe.glitch.me/

Für einen Ursprungstest registrieren

Damit anonyme iFrames Entwickler bei der Einführung der ursprungsübergreifenden Isolierung unterstützen, stellen wir sie in Chrome von Version 106 bis 108 als Ursprungstest zur Verfügung.

Registrieren Sie sich für den Ursprungstest, damit anonyme iFrames auf Ihrer Website verwendet werden können:

  1. Fordern Sie ein Token für Ihren Ursprung an.
  2. Verwenden Sie das Token auf eine der folgenden Arten:
    • Im HTML-Code: html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • Im JavaScript: js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
    • In den HTTP-Headern: text Origin-Trial: TOKEN_GOES_HERE
  3. Füge deiner Seite einen anonymen iFrame hinzu: html <iframe anonymous src="https://example.com">

Wenn Sie Feedback zu dieser Funktion haben, können Sie ein Problem im GitHub-Repository melden.

Ursprungstest eines Drittanbieters

Der Ursprungstest ist auch für Skripts von Drittanbietern verfügbar. Es kann also durch Skripts aktiviert werden, die auf der Seite eingebettet sind.

Weitere Informationen zur Registrierung für einen Drittanbieter-Ursprungstest.

Häufig gestellte Fragen

Wird diese Funktion auch in anderen Browsern eingeführt?

Sind iFrames in <iframe anonymous> anonym verschachtelt?

Ja. Sie wird übernommen. Wenn ein iFrame anonym ist, gilt dies für alle iFrames in der gesamten Unterstruktur, auch ohne das Attribut anonymous.

Werden Pop-ups von <iframe anonymous> auch anonym erstellt?

Pop-ups werden geöffnet, als ob noopener festgelegt wäre. Sie werden auf der Grundlage eines neuen regulären Kontexts auf oberster Ebene erstellt und sind nicht anonym. Sie können nicht mit dem anonymen iFrame kommunizieren.

Ressourcen