Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Fenced Frame API
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell:Dies ist eineexperimentelle Technologie
Überprüfen Sie dieBrowser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Warnung:Diese Funktion wird derzeit von einem Browser-Anbieter abgelehnt.Weitere Details finden Sie im AbschnittStandards positions.
DieFenced Frame API bietet Funktionalitäten zur Steuerung von Inhalten, die in<fencedframe>-Elemente eingebettet sind.
In diesem Artikel
Konzepte und Nutzung
Eine Hauptquelle vonDatenschutz undSicherheitsproblemen im Web sind Inhalte, die in<iframe>-Elemente eingebettet sind. Historisch gesehen wurden<iframe>s verwendet, um Drittanbieter-Cookies zu setzen, die dazu verwendet werden können, Informationen zu teilen und Benutzer über Websites hinweg zu verfolgen. Außerdem kann der in ein<iframe> eingebettete Inhalt mit dem einbettenden Dokument kommunizieren (zum Beispiel durch Verwendung vonWindow.postMessage()).
Das einbettende Dokument kann auch Skripte verwenden, um verschiedene Informationen aus dem<iframe> zu lesen — zum Beispiel können Sie durch das Lesen der eingebetteten URL aus dersrc-Eigenschaft erhebliche Tracking-/Fingerprinting-Daten erhalten, insbesondere wenn esURL-Parameter enthält. Das<iframe> kann auch auf das DOM des einbettenden Kontextes zugreifen und umgekehrt.
Die meisten modernen Browser arbeiten an Mechanismen zur Partionierung von Speicher, sodass Cookie-Daten nicht mehr für das Tracking verwendet werden können (zum Beispiel sieheCookies mit unabhängigem partitioniertem Status (CHIPS) oderFirefox State Partitioning).
<fencedframe>-Elemente zielen darauf ab, ein weiteres Puzzleteil zu lösen — sie sind<iframe>s sehr ähnlich in Form und Funktion, außer dass:
- Kommunikation nicht zwischen dem
<fencedframe>-Inhalt und der einbettenden Seite geteilt werden kann. - Ein
<fencedframe>kann auf datenübergreifende Webseiten zugreifen, jedoch nur in einem sehr spezifischen, kontrollierten Umfeld, das die Privatsphäre des Benutzers wahrt. - Ein
<fencedframe>kann nicht frei manipuliert oder seine Daten durch reguläre Skripte abgerufen werden (z.B. bei der Lesung oder dem Setzen der Quell-URL).<fencedframe>-Inhalte können nur durchspezifische APIs eingebettet werden. - Ein
<fencedframe>kann nicht auf das DOM des einbettenden Kontextes zugreifen, und umgekehrt kann der einbettende Kontext nicht auf das DOM des<fencedframe>s zugreifen.
Weitere Informationen über das Kommunikationsmodell von Fenced Frames finden Sie imLeitfaden zur Kommunikation mit eingebetteten Frames.
Anwendungsfälle
<fencedframe>s werden von anderen APIs verwendet, um verschiedene Arten von datenübergreifenden Inhalten einzubetten oder Daten zu sammeln und dabei unterschiedliche Anwendungsfälle auf datenschutzfreundliche Weise zu erfüllen. Die meisten dieser Anwendungen stützten sich bisher auf Drittanbieter-Cookies oder andere Mechanismen, die schlecht für den Datenschutz waren.
- DieShared Storage API bietet Zugriff auf nicht partitionierte datenübergreifende Daten in einer sicheren Umgebung und berechnet und/oder zeigt Ergebnisse in einem
<fencedframe>an. Zum Beispiel:- Werbetreibende können die Reichweite einer Werbung messen oder nachfolgende Anzeigen basierend darauf schalten, welche Anzeigen Benutzer bereits auf anderen Websites gesehen haben.
- Entwickler können A/B-Tests durchführen und dabei Varianten einem Benutzer basierend auf einer Gruppe zeigen, der er zugewiesen ist, oder basierend darauf, wie viele Benutzer jede einzelne Variante bereits gesehen haben.
- Unternehmen können das Benutzererlebnis basierend darauf anpassen, was Benutzer auf anderen Seiten gesehen haben. Zum Beispiel, wenn ein Benutzer bereits Mitgliedschaft gekauft hat, möchten Sie ihm möglicherweise keine Mitgliedsanzeigen auf Ihren anderen Websites zeigen.
- DieProtected Audience API ermöglicht es Entwicklern, interessensorientierte Werbeanzeigen zu implementieren, insbesondere für Remarketing- und benutzerdefinierte Zielgruppenanwendungen. Sie kann mehrere Gebote für Anzeigeflächen auswerten und die gewonnene Anzeige in einem
<fencedframe>anzeigen. - DiePrivate Aggregation API kann Daten aus
<fencedframe>s (ausgehend von Shared Storage oder der Protected Audience API) erfassen und aggregierte Berichte erstellen.
Wie funktionieren<fencedframe>s?
Wie oben erwähnt, steuern Sie den Inhalt, der in einem<fencedframe> eingebettet wird, nicht direkt über reguläre Skripte.
Um festzulegen, welcher Inhalt in einem<fencedframe> angezeigt wird, generiert eine API (wieProtected Audience oderShared Storage) einFencedFrameConfig-Objekt, welches dann per JavaScript als Wert derHTMLFencedFrameElement.config-Eigenschaft des<fencedframe> gesetzt wird.
Das folgende Beispiel bezieht eineFencedFrameConfig aus einer Anzeigenausschreibung der Protected Audience API, die dann verwendet wird, um die gewonnene Anzeige in einem<fencedframe> anzuzeigen:
const frameConfig = await navigator.runAdAuction({ // … auction configuration resolveToConfig: true,});const frame = document.createElement("fencedframe");frame.config = frameConfig;resolveToConfig: true muss an denrunAdAuction()-Aufruf übergeben werden, um einFencedFrameConfig-Objekt zu erhalten. WennresolveToConfig auffalse gesetzt ist, wird das resultierendePromise zu einer undurchsichtigenURN aufgelöst (z. B.urn:uuid:c36973b5-e5d9-de59-e4c4-364f137b3c7a), die nur in einem<iframe> verwendet werden kann.
In jedem Fall speichert der Browser eine URL, die den Zielort des eingebetteten Inhalts enthält — zugeordnet zur undurchsichtigen URN oder zur internenurl-Eigenschaft desFencedFrameConfig. Der URL-Wert kann nicht von JavaScript, das im einbettenden Kontext läuft, abgerufen werden.
Hinweis:Es wird Unterstützung für undurchsichtige URNs in<iframe>s bereitgestellt, um die Migration bestehender Implementierungen auf diePrivacy Sandbox APIs zu erleichtern. Diese Unterstützung ist als vorübergehend gedacht und wird in Zukunft entfernt, wenn die Akzeptanz steigt.
Hinweis:>FencedFrameConfig hat einesetSharedStorageContext()-Methode, die verwendet wird, um Daten vom einbettenden Dokument an den<fencedframe>-gemeinsamen Speicher zu übergeben. Er könnte zum Beispiel in einemWorklet über das<fencedframe>-Element zugegriffen und verwendet werden, um einen Bericht zu erstellen. Siehe dieShared Storage API für weitere Details.
Zugriff auf Fenced Frame-Funktionalität imFence-Objekt
Innerhalb von Dokumenten, die in<fencedframe>s eingebettet sind, hat JavaScript Zugriff auf eineWindow.fence-Eigenschaft, die eineFence-Instanz für dieses Dokument zurückgibt. Dieses Objekt enthält mehrere Funktionen, die speziell für die Fenced Frame API-Funktionalität relevant sind.Zum Beispiel bietetFence.reportEvent() eine Möglichkeit, die Übermittlung von Berichtsdaten über einbeacon an eine oder mehrere spezifizierte URLs auszulösen, um Anzeigeneinsichten und Klicks zu melden.
Berechtigungspolitik
Nur spezifische Funktionen, die für die Verwendung in<fencedframe>s entwickelt wurden, können über Berechtigungspolitiken aktiviert werden, die auf diese angewendet werden; andere politisch gesteuerte Funktionen sind in diesem Kontext nicht verfügbar. Weitere Details finden Sie unterBerechtigungspolitiken, die für Fenced Frames verfügbar sind.
HTTP-Header
EinSec-Fetch-Dest-Header mit dem Wertfencedframe wird für alle Anfragen gesetzt, die innerhalb eines<fencedframe> gestellt werden, einschließlich untergeordneter<iframe>s, die innerhalb eines<fencedframe> eingebettet sind.
Sec-Fetch-Dest: fencedframeDer Server muss einenSupports-Loading-Mode-Antwortheader mit dem Wertfenced-frame für jedes Dokument setzen, das in ein<fencedframe> oder<iframe>, das innerhalb eines<fencedframe> eingebettet ist, geladen werden soll.
Supports-Loading-Mode: fenced-frameAndere Auswirkungen von Fenced Frames auf HTTP-Header sind wie folgt:
- User-Agent-Client-Hints sind innerhalb von Fenced Frames nicht verfügbar, da sie aufBerechtigungspolitikdelegation beruhen, die zum Datenleak genutzt werden könnte.
- Strenge
Cross-Origin-Opener-Policy-Einstellungen werden auf neue Browsing-Kontexte angewendet, die innerhalb von Fenced Frames geöffnet werden, da sie ansonsten genutzt werden könnten, um Informationen an andere Herkunftsorte zu leaken. Jedes neue Fenster, das innerhalb eines Fenced Frames geöffnet wird, hatrel="noopener"undCross-Origin-Opener-Policy: same-origingesetzt, um sicherzustellen, dassWindow.openernullzurückgibt und es in seiner eigenen Browsing-Kontextgruppe platziert wird. Content-Security-Policy: fenced-frame-srcwurde hinzugefügt, um gültige Quellen für verschachtelte Browsing-Kontexte zu spezifizieren, die in<fencedframe>-Elemente geladen werden.Content-Security-Policy: sandbox-benutzerdefinierte Einstellungen können von Fenced Frames nicht geerbt werden, um Datenschutzprobleme zu mildern. Damit ein Fenced Frame geladen werden kann, müssen Sie keinesandboxCSP spezifizieren (was die unten stehenden Werte impliziert) oder die folgenden Sandbox-Werte angeben:allow-same-originallow-formsallow-scriptsallow-popupsallow-popups-to-escape-sandboxallow-top-navigation-by-user-activation
beforeunload undunload-Ereignisse
beforeunload- undunload-Ereignisse werden auf Fenced Frames nicht ausgelöst, da sie Informationen in Form eines Seitenlöschungszeitstempels leaken können. Implementierungen zielen darauf ab, potenzielle Lecks so weit wie möglich zu eliminieren.
Schnittstellen
FencedFrameConfigRepräsentiert die Navigation eines
<fencedframe>, d.h. welcher Inhalt darin angezeigt wird. EinFencedFrameConfigwird von einer Quelle wie derProtected Audience API zurückgegeben und als Wert derHTMLFencedFrameElement.configgesetzt.FenceEnthält mehrere Funktionen, die für Fenced Frame-Funktionalität relevant sind. Nur für in einem
<fencedframe>eingebettete Dokumente verfügbar.HTMLFencedFrameElementRepräsentiert ein
<fencedframe>-Element in JavaScript und bietet Eigenschaften, um es zu konfigurieren.
Erweiterungen für andere Schnittstellen
Navigator.deprecatedReplaceInURN()Ersetzt spezifische Zeichenfolgen innerhalb der zugeordneten URL entsprechend einer gegebenen undurchsichtigen URN oder der internen
url-Eigenschaft einesFencedFrameConfig.Window.fenceGibt ein
Fence-Objekt für den aktuellen Dokumentenkontext zurück. Nur für in einem<fencedframe>eingebettete Dokumente verfügbar.
Einschreibung und lokales Testen
Bestimmte API-Funktionen, dieFencedFrameConfigs erstellen, wieNavigator.runAdAuction() (Protected Audience API) undWindowSharedStorage.selectURL() (Shared Storage API), sowie andere Funktionen wieFence.reportEvent(), erfordern, dass Sie Ihre Seite in einenPrivacy Sandbox-Einschreibungsprozess anmelden. Wenn Sie dies nicht tun, werden die API-Aufrufe mit einer Konsolenwarnung fehlschlagen.
Hinweis:In Chrome können Sie Ihren Fenced Frame-Code noch lokal testen, ohne dass eine Anmeldung erforderlich ist. Um lokales Testen zu ermöglichen, aktivieren Sie das folgende Chrome-Entwicklerflag:
chrome://flags/#privacy-sandbox-enrollment-overrides
Beispiele
Die folgenden Demos verwenden alle<fencedframe>s:
- Shared Storage API-Demos (einschließlich einiger Beispiele der Private Aggregation API)
- Protected Audience API-Demo
Spezifikationen
| Specification |
|---|
| Fenced Frame> # the-fencedframe-element> |
Standards positions
Ein Browser-Anbieterlehnt diese Spezifikation ab.Bekannte Standards-Positionen sind wie folgt:
- Mozilla (Firefox):Negativ
Browser-Kompatibilität
Siehe auch
- Fenced frames auf privacysandbox.google.com
- The Privacy Sandbox auf privacysandbox.google.com