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

Arthur Sonzogni
Arthur Sonzogni

Entwickler, die COEP verwenden, können jetzt iFrames von Drittanbietern einbetten, die COEP selbst nicht verwenden.

Warum wir COEP benötigen

Einige Web-APIs erhöhen das Risiko von Side-Channel-Angriffen wie Spectre. Um dieses Risiko zu minimieren, bieten Browser eine opt-in-basierte isolierte Umgebung namens ursprungsübergreifende Isolierung, für die unter anderem COEP bereitgestellt werden muss. So können Websites privilegierte Funktionen wie SharedArrayBuffer, performance.measureUserAgentSpecificMemory() und hochpräzise Timer mit besserer Auflösung verwenden.

Um die ursprungsübergreifende Isolation 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 plattformübergreifende Isolation bietet Webseiten zwar mehr Sicherheit und die Möglichkeit, leistungsstarke Funktionen zu aktivieren, die Bereitstellung von COEP kann jedoch schwierig sein. Eine der größten Herausforderungen besteht darin, dass für alle quellenübergreifenden iFrames auch COEP und CORP bereitgestellt werden müssen. Iframes ohne diese Header werden vom Browser nicht geladen.

Die Iframes werden in der Regel von einem Drittanbieter bereitgestellt, für den die Implementierung von COEP möglicherweise nicht einfach ist.

Anonyme iFrames als Retter in der Not

Hier kommt der anonyme Iframe ins Spiel. Wenn du dem <iframe>-Element das anonymous-Attribut hinzufügst, wird der Iframe aus einer anderen Partition des sitzungsspezifischen Speichers geladen und unterliegt nicht mehr den COEP-Einschränkungen.

Beispiel:

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

Der 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. Es beginnt mit einem leeren Keksglas. Ebenso laden und speichern Speicher-APIs wie LocalStorage, CacheStorage und IndexedDB Daten in der neuen sitzungsspezifischen Partition. Die Partition ist auf das aktuelle übergeordnete Dokument und den Ursprung des Iframes beschränkt. Der Speicherplatz wird freigegeben, sobald das Dokument der obersten Ebene entladen wurde.

Anonyme Iframes unterliegen nicht den COEP-Embedding-Regeln. Das ist jedoch weiterhin sicher, da sie jedes Mal aus einem neuen leeren Kontext geladen werden. Sie werden geladen, ohne dass ihre Daten personalisiert werden. Sie enthalten nur öffentliche Daten, die für einen Angreifer nicht von Wert sind.

Demo

Einen anonymen iFrame findest du unter: https://anonymous-iframe.glitch.me/

Für einen Ursprungstest registrieren

Damit Entwickler die ursprungsübergreifende Isolation mithilfe von anonymen iFrames nutzen können, stellen wir sie in Chrome von Version 106 bis 108 als Ursprungstest zur Verfügung.

Registrieren Sie sich für den Ursprungstest, damit Ihre Website anonyme Iframes verwenden kann:

  1. Fordere ein Token für deinen Ursprung an.
  2. Sie haben folgende Möglichkeiten, das Token zu verwenden:
    • In Ihrem HTML-Code: html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • In deinem JavaScript-Code: 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ügen Sie Ihrer Seite einen anonymen iFrame hinzu: html <iframe anonymous src="https://example.com">

Wenn Sie Feedback zu dieser Funktion haben, erstellen Sie ein Problem im GitHub-Repository.

Test für Drittanbieter-Ursprung

Der Ursprungstest ist auch für Drittanbieter-Scripts verfügbar. Das bedeutet, dass es durch auf der Seite eingebettete Scripts aktiviert werden kann.

Weitere Informationen zur Registrierung für einen Ursprungstest von Drittanbietern

FAQ

Wird diese Funktion auch in anderen Browsern übernommen?

Sind iFrames, die in <iframe anonymous> verschachtelt sind, anonym?

Ja. Sie wird vererbt. Sobald ein Iframe anonym ist, gilt das für alle Iframes im gesamten untergeordneten Knoten, auch wenn kein anonymous-Attribut vorhanden ist.

Sind Pop-ups, die über <iframe anonymous> erstellt werden, auch anonym?

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

Ressourcen