Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Storage Access API
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die Speicherzugriffs-API bietet eine Möglichkeit für standortübergreifende Inhalte, die in einem Drittanbieter-Kontext geladen werden (z. B. eingebettet in einem <iframe>), Zugriff auf Drittanbieter-Cookies und unpartitionierte Zustände zu erhalten, auf die normalerweise nur in einem Erstanbieter-Kontext zugegriffen werden kann (d.h. wenn sie direkt in einem Browser-Tab geladen werden).
Die Speicherzugriffs-API ist für Benutzeragenten von Bedeutung, die standardmäßig den Zugriff auf Drittanbieter-Cookies und unpartitionierte Zustände blockieren, um die Privatsphäre zu verbessern (z. B., um Tracking zu verhindern). Es gibt legitime Verwendungszwecke für Drittanbieter-Cookies und unpartitionierte Zustände, die wir auch mit diesen Standardbeschränkungen weiterhin ermöglichen möchten. Beispiele sind Single Sign-On (SSO) mit föderierten Identitätsanbietern (IdPs) oder das Speichern von Benutzerdetails wie Standortdaten oder Ansichtseinstellungen über verschiedene Websites hinweg.
Die API bietet Methoden, mit denen eingebettete Ressourcen überprüfen können, ob sie derzeit Zugriff auf Drittanbieter-Cookies haben, und, falls nicht, beim Benutzeragenten Zugriff anfordern können.
Konzepte und Nutzung
Browser implementieren mehrere Funktionen und Richtlinien für den Speicherzugriff, die den Zugriff auf Drittanbieter-Cookies und unpartitionierte Zustände einschränken. Diese reichen von der Bereitstellung eines einzigartigen Cookie-Speicherplatzes für jede eingebettete Ressource unter jedem obersten Ursprung (partitionierte Cookies) bis hin zum vollständigen Blockieren des Cookie-Zugriffs, wenn Ressourcen in einem Drittanbieter-Kontext geladen werden.
Die Semantik der Funktionen und Richtlinien zur Blockierung von Drittanbieter-Cookies und unpartitionierten Zuständen unterscheiden sich von Browser zu Browser, aber die Kernfunktionalität ist ähnlich. Standorteigene Ressourcen, die in einem Drittanbieter-Kontext eingebettet sind, erhalten keinen Zugriff auf denselben Zustand, auf den sie zugreifen könnten, wenn sie in einem Erstanbieter-Kontext geladen werden. Dies erfolgt in guter Absicht — Browserhersteller möchten Schritte unternehmen, um die Privatsphäre und Sicherheit ihrer Benutzer besser zu schützen. Beispiele beinhalten, dass weniger Tracking-Aktivitäten zwischen verschiedenen Websites möglich sind und weniger Angriffsflächen für Exploits wie Cross-Site Request Forgery (CSRF) bestehen.
Es gibt jedoch legitime Verwendungszwecke für eingebettete standortübergreifende Inhalte, die auf Drittanbieter-Cookies und unpartitionierte Zustände zugreifen, und die oben genannten Funktionen und Richtlinien sind bekannt dafür, dies zu stören. Nehmen wir an, Sie haben eine Reihe verschiedener Websites, die Zugang zu unterschiedlichen Produkten bieten — heads-example.com, shoulders-example.com, knees-example.com und toes-example.com.
Alternativ könnten Sie Ihre Inhalte oder Dienste in verschiedene Länderdomains für Lokalisierungszwecke trennen — example.com, example.ua, example.br usw. — oder in einer anderen Weise.
Sie könnten begleitende Utility-Websites haben, die in alle anderen Websites eingebettete Komponenten bereitstellen, um beispielsweise SSO (sso-example.com) oder allgemeine Personalisierungsdienste (services-example.com) bereitzustellen. Diese Utility-Websites möchten ihren Zustand über Cookies mit den Websites teilen, in die sie eingebettet sind. Sie können keine Erstanbieter-Cookies teilen, da sie sich auf unterschiedlichen Domains befinden, und Drittanbieter-Cookies werden in Browsern, die diese blockieren, nicht mehr funktionieren.
In solchen Situationen ermutigen Website-Betreiber die Benutzer oft, ihre Website als Ausnahme hinzuzufügen oder die Richtlinien zur Blockierung von Drittanbieter-Cookies vollständig zu deaktivieren. Benutzer, die weiterhin mit ihren Inhalten interagieren möchten, müssen ihre Blockierungspolitik erheblich für Ressourcen lockern, die von allen eingebetteten Ursprüngen geladen werden, und möglicherweise über alle Websites hinweg.
Die Speicherzugriffs-API soll dieses Problem lösen; eingebettete standortübergreifende Inhalte können uneingeschränkten Zugriff auf Drittanbieter-Cookies und unpartitionierte Zustände auf einer Frame-zu-Frame-Basis über die Methode Document.requestStorageAccess() anfordern. Sie kann auch überprüfen, ob sie bereits Zugriff hat, über die Methode Document.hasStorageAccess().
Hinweis: Die Speicherzugriffs-Header sind eine HTTP-Erweiterung der API, die einen effizienteren Workflow für die Speicher-API ermöglicht und auch verwendet werden kann, um eine zuvor gewährte Speicherzugriffsberechtigung für passive Ressourcen wie Bilder zu aktivieren.
Unpartitionierte versus partitionierte Cookies
Die Speicherzugriffs-API wird nur benötigt, um den Zugriff auf unpartitionierte Drittanbieter-Cookies bereitzustellen! Unpartitionierte Cookies sind solche, bei denen alle auf derselben Website gesetzten Cookies im selben Cookie-Jar gespeichert werden — die traditionelle Art und Weise seit den frühen Zeiten des Webs. Da die Gefahr besteht, dass Daten, die für eine Website gedacht sind, anderen Websites zugänglich gemacht werden, blockieren Browser häufig das Senden unpartitionierter Drittanbieter-Cookies in Anfragen und lassen den Zugriff darauf in eingebetteten Kontexten nicht zu.
Dies steht im Gegensatz zu partitionierten Cookies, bei denen eingebetteten Ressourcen unter jeder obersten Website ein einzigartiger Cookie-Speicherplatz zugewiesen wird, der von denen anderer Websites isoliert ist. Da es kein Datenschutzrisiko gibt, da es nicht möglich ist, Benutzer über Sites mithilfe partitionierter Cookies zu verfolgen, senden Browser partitionierte Cookies in Anfragen und stellen sie eingebetteten Ressourcen zur Verfügung. Beachten Sie jedoch, dass, da die Cookies nicht zwischen Websites geteilt werden, sie auch nicht automatisch synchronisiert werden. Browser haben verschiedene Mechanismen zur Partitionierung des Zugriffs auf Drittanbieter-Cookies, beispielsweise Firefox Total Cookie Protection und Cookies Having Independent Partitioned State (CHIPS).
Wenn wir im Kontext der Speicherzugriffs-API über Drittanbieter-Cookies sprechen, meinen wir implizit unpartitionierte Drittanbieter-Cookies.
Funktionsweise
Drittanbieter-Inhalte, die in einem <iframe> eingebettet sind und auf Cookies oder andere unpartitionierte Zustände zugreifen müssen, können mithilfe der Speicherzugriffs-API wie folgt Zugriff anfordern:
-
Document.hasStorageAccess()kann aufgerufen werden, um zu überprüfen, ob der eingebettete Inhalt bereits Zugriff auf unpartitionierte Cookies hat. -
Falls nicht, kann
Document.requestStorageAccess()mit transient activation aufgerufen werden, um die Erlaubnisstorage-accessanzufordern.Abhängig vom Browser wird der Benutzer auf leicht unterschiedliche Weise gefragt, ob er der anfordernden Einbettung die Erlaubnis erteilen möchte.
- Safari zeigt Eingabeaufforderungen für alle eingebetteten Inhalte an, die zuvor keinen Speicherzugriff erhalten haben.
- Firefox fordert Benutzer nur auf, nachdem ein Ursprung auf mehr als einer Schwellenanzahl von Websites um Speicherzugriff gebeten hat.
- Chrome zeigt Eingabeaufforderungen für alle eingebetteten Inhalte an, die zuvor keinen Speicherzugriff erhalten haben. Es wird jedoch den Zugriff automatisch gewähren und die Eingabeaufforderungen überspringen, wenn der eingebettete Inhalt und die einbettende Website Teil desselben related website set sind.
-
Die Genehmigung wird basierend auf der Erfüllung aller Sicherheitsanforderungen erteilt oder verweigert — siehe Sicherheitsüberlegungen für allgemeine Anforderungen und Browser-spezifische Variationen für einige browserspezifische Sicherheitsanforderungen. Die
Promise-basierte Natur vonrequestStorageAccess()ermöglicht Ihnen das Ausführen von Code, um Erfolgs- und Fehlerszenarien zu verarbeiten.Sobald die Genehmigung gewährt ist, wird ein Erlaubnisschlüssel mit der Struktur
<top-level site, embedded site>im Browser gespeichert. Wenn die einbettende Website beispielsweiseembedder.comist und die Einbettunglocator.example.com, würde der Schlüssel<embedder.com, example.com>sein.Das bedeutet, dass die Erlaubnis für den Zugriff auf unpartitionierte Cookies für jede Seite auf der Website
example.comoder einer ihrer Subdomains, die in jede Seite auf derembedder.com-Website eingebettet ist, gewährt wurde. Beispielsweise könnendocs.example.com,profile.example.comjetztrequestStorageAccess()aufrufen und das Versprechen würde automatisch erfüllt werden.Hinweis: Ältere Spezifikationsversionen verwendeten die spezifischere Erlaubnisschlüsselstruktur
<top-level site, embedded origin>, was bedeutete, dass samesite-Cross-Origin-Einbettungen nicht mit dem Erlaubnisschlüssel übereinstimmten und den gesamten Prozess separat durchlaufen mussten. -
Die Erlaubnis muss explizit für jeden Kontext aktiviert werden.
Wenn eine Einbettung die Erlaubnis erhält, wird diese Erlaubnis auch für den aktuellen Kontext aktiviert. Andere Kontexte, wie neue Browser-Tabs oder Inhalte in anderen
<iframe>-Elementen auf der Seite, haben standardmäßig keinen Zugriff auf Drittanbieter-Cookies. Das bedeutet, selbst wenn die Erlaubnis erteilt wurde, muss die Seite laden undrequestStorageAccess()aufrufen, um die Erlaubnis zu aktivieren. Wenn die Erlaubnis bereits erteilt wurde, erfordert ein Aufruf vonrequestStorageAccess()keine vorübergehende Aktivierung und das Versprechen wird automatisch erfüllt werden.Die einzige Ausnahme von dem Verhalten "standardmäßig blockiert" ist, wenn eine Einbettung eine navigation von gleicher Herkunft durchführt, um sich nach Erhalt der Erlaubnis oder Aktivierung einer Erlaubnis neu zu laden. In solchen Fällen wird der Speicherzugriff aus der vorherigen Navigation übernommen. Dies ermöglicht der eingebetteten Ressource, sich selbst neu zu laden und Zugriff auf ihre Cookies zu erhalten.
Hinweis: In älteren Spezifikationsversionen war der Zugriff pro Seite (Safari ist der einzige Browser, der dieses Modell noch verwendet). Wenn eine Einbettung über
requestStorageAccess()Zugriff auf Drittanbieter-Cookies erhielt, erhielten alle anderen samesite-Einbettungen automatisch Zugriff. Dies war aus Sicherheitsgründen kein wünschenswertes Verhalten. Wennshop.example.combeispielsweiselocator.users.comeinbettete, um Benutzern zu ermöglichen, ihre Standortinformationen während des Einkaufs zu verwenden undlocator.users.comrequestStorageAccess()aufrief, konnteshop.example.comund jede andere von ihm eingebettete Seite auf seine Cookies zugreifen und auch auf Cookies vonprivate.users.com, die nicht für Einbettungen gedacht sind. Lesen Sie mehr über die Beweggründe hinter dieser Änderung. -
Nachdem eine Einbettung die Berechtigung zum Speicherzugriff aktiviert hat, sollte sie sich selbst neu laden. Der Browser wird die Ressource mit einbezogenen Drittanbieter-Cookies erneut anfordern und sie beim Laden der eingebetteten Ressource zur Verfügung stellen. Die richtlinienbezogenen Anfragen der Einbettung folgen der Samesite-Politik, daher werden Drittanbieter-Cookies nur mit Anfragen an die genaue Herkunft der eingebetteten Ressource gesendet. Andere Ursprünge innerhalb derselben Website, die auf Drittanbieter-Cookies zugreifen möchten, müssen die Speicherzugriffs-Berechtigung separat aktivieren.
Speicherzugriffs-Header
Die API erfordert, dass eine Ressource requestStorageAccess() für jeden neuen Kontext aufruft, um sich für die Aktivierung der bereits gewährten Speicherzugriffsberechtigung anzumelden. Dies bedeutet im Gegenzug, dass die eingebettete Ressource zuerst ohne Cookies angefordert und geladen werden muss, damit sie die Methode aufrufen kann.
Die Speicherzugriffs-Header ermöglichen einen Workflow, bei dem der Server die Aktivierung der Berechtigung für den Kontext anfordern kann und damit das unnötige zusätzliche Laden der eingebetteten Ressource vermieden wird, wenn die Erlaubnis bereits erteilt wurde. Die Ressource muss jedoch noch geladen werden, um die Erlaubnis beim ersten Mal anzufordern.
Es gibt zwei Header:
- Der Browser fügt der Anfrage den
Sec-Fetch-Storage-Access-Header hinzu, um den Speicherzugriffsstatus des aktuellen Abrufkontexts anzuzeigen, z. B. ob die Erlaubnis aktiviert, erteilt oder nicht erteilt wurde. - Abhängig vom Speicherzugriffsstatus der Anfrage kann der Server mit einem
Activate-Storage-Access-Header antworten, um zu verlangen, dass der Browser die Erlaubnis für den Kontext aktiviert und die Anfrage mit Cookies erneut versucht (wobei vermieden wird, die Ressource laden zu müssen, umrequestStorageAccess()aufzurufen, um dasselbe Ziel zu erreichen), oder die Erlaubnis aktiviert und die zurückgegebene Ressource lädt.
Die Speicherzugriffs-Header können auch verwendet werden, um die Erlaubnis für passive Ressourcen wie Bilder zu aktivieren, sofern der Kontext bereits eine Erlaubnis hat. Dies könnte zum Beispiel verwendet werden, um verschiedene Bilder für verschiedene Benutzer, Zielgruppen oder Orte zu servieren.
Die Workflows werden im Abschnitt Speicherzugriffs-Header-Sequenzen gezeigt.
Anforderungs-/Antwortfluss
JavaScript-Sequenzen
Betrachten wir das Beispiel einer in einem <iframe> geladenen Bibliothek, die über mehrere Seiten hinweg geteilt werden muss und auf Anmeldedaten setzt, die in unpartitionierten Cookies gespeichert sind.
Betrachten wir zuerst den Fall, in dem keine Erlaubnis erteilt wurde:
-
Der Browser fordert die Ressource an, ohne Drittanbieter-Cookies einzuschließen.
-
Der Server antwortet mit einer "Rückfall"-Version von Inhalten, die nicht auf Anmeldedaten setzt und die beim Laden keinen Zugriff auf ihre Cookies hat.
- Sobald die Ressource geladen ist, ruft sie
requestStorageAccess()mit transienter Aktivierung auf, um die Erlaubnisstorage-accessanzufordern und zu aktivieren. - Wenn die Erlaubnis erteilt wird, lädt die Ressource sich selbst neu.
- Sobald die Ressource geladen ist, ruft sie
-
Der Browser fordert die Ressource erneut an, diesmal unter Einbeziehung von Drittanbieter-Cookies.
-
Die Antwort des Servers enthält eine "anmeldedatenbasierte" Version der Ressource.
Der Browser lädt die Ressource, die Zugriff auf ihre eigenen Cookies hat, weil sie eine aktivierte storage-access-Erlaubnis hat.
[画像:Speicher-API-Workflow - ohne Speicherzugriffs-Berechtigung]
Nun betrachten wir den Fall, in dem die Erlaubnis erteilt, aber nicht aktiviert wurde. Dies würde passieren, wenn Sie dieselbe URL in einem neuen Browser-Tab öffnen oder versuchen, dieselbe Ressource von einer anderen Seite auf derselben Website einzubetten.
Der Workflow ist fast genau derselbe, da die Ressource trotzdem zuerst ohne Cookies geladen werden muss und anschließend requestStorageAccess() aufrufen muss, um die Erlaubnis für den Kontext zu aktivieren. In diesem Fall benötigt sie jedoch keine vorübergehende Aktivierung und kann beim Laden ausgeführt werden.
[画像:Speicher-API-Workflow - Speicherzugriffs-Berechtigung aktivieren]
Speicherzugriffs-Header-Sequenzen
Die Speicherzugriffs-Header ermöglichen einen verbesserten Workflow, der es dem Server erlaubt, den Browser aufzufordern, eine bereits erteilte Erlaubnis zur Aktivierung zu nutzen und die Anforderung mit einbezogenen Cookies erneut zu versuchen. Dies vermeidet das Erfordernis, die Ressource zu laden, um requestStorageAccess() aufzurufen, wenn der Benutzer die Erlaubnis bereits erteilt hat.
Hinweis:
Diese Header bieten keinen Mechanismus, um die Speicherzugriffs-Berechtigung überhaupt zu gewähren. Die Erlaubnis muss immer von der eingebetteten Ressource durch Aufrufen von requestStorageAccess() mit vorübergehender Aktivierung angefordert werden.
Der Sec-Fetch-Storage-Access-Header wird zu Anforderungen hinzugefügt, um den Speicherzugriffsstatus des aktuellen Abrufkontexts anzugeben, etwa ob die Erlaubnis aktiviert, erteilt oder nicht erteilt wurde. Abhängig vom Speicherzugriffsstatus der Anforderung kann der Server mit einem Activate-Storage-Access-Header antworten, um den Browser aufzufordern, die Erlaubnis für den Kontext zu aktivieren und die Anforderung mit Cookies erneut zu versuchen.
Schauen wir uns zunächst den Fall an, in dem versucht wird, eine eingebettete Ressource für einen neuen Kontext zu laden, der bereits eine erteilte Erlaubnis hat:
- Der Browser sendet eine Anfrage mit
Sec-Fetch-Storage-Access: inactive, um anzuzeigen, dass die Erlaubnis erteilt, aber für den Kontext inaktiv ist.- Die Anforderung wird auch den
Origin-Header enthalten, um dem Server zu helfen, zu entscheiden, ob er die Berechtigung aktivieren möchte.
- Die Anforderung wird auch den
- Der Server kann dann mit
Activate-Storage-Access: retryantworten, um anzuzeigen, dass der Browser die Erlaubnis aktivieren und die Anfrage mit Cookies erneut versuchen soll.- Die Antwort sollte auch den
Vary: Sec-Fetch-Storage-Access-Header enthalten, da sie vom WertSec-Fetch-Storage-Accessabhängt. - Beachten Sie, dass die Antwort keinen Inhalt enthält.
- Die Antwort sollte auch den
- Wenn der Browser die Anfrage erneut versucht, fügt er
Sec-Fetch-Storage-Access: activeneben den Cookies hinzu. - Der Server antwortet dann mit
Activate-Storage-Access: load, was dem Browser mitteilt, die neue Version der Bibliothek mit Zugriff auf die Drittanbieter-Cookies zu laden.
[画像:Speicherzugriffs-Header-Workflow - Speicherzugriffs-Berechtigung aktivieren und erneut versuchen]
Der letzte Zustand, der zu berücksichtigen ist, ist das Laden einer eingebetteten Ressource, für die die Erlaubnis nicht erteilt wurde:
Hinweis: Da wir die Header nicht verwenden können, um die Erlaubnis zu erteilen, müssen wir die Ressource ohne Cookies laden, damit sie die Erlaubnis anfordern kann. Dies ist dieselbe Sequenz, als ob die Header nicht angewendet werden würden.
-
Der Browser sendet eine Anfrage mit
Sec-Fetch-Storage-Access: none, um anzuzeigen, dass die Erlaubnis nicht erteilt wurde. -
Der Server antwortet dann mit der Ressource, die beim Laden die Erlaubnis für sicheren Zugriff mit vorübergehender Aktivierung anfordert. Der
Activate-Storage-Access-Header ist nicht in der Antwort enthalten, aber der Server sollteVary: Sec-Fetch-Storage-Accesshinzufügen.Nachdem der Benutzer die Erlaubnis erteilt (und dadurch aktiviert) hat, lädt die Einbettung sich selbst neu.
-
Der Browser fügt der Anfrage
Sec-Fetch-Storage-Access: activehinzu, um anzuzeigen, dass der Kontext eine aktiviertestorage-access-Erlaubnis hat, und schließt die Drittanbieter-Cookies ein. -
Der Server antwortet mit
Activate-Storage-Access: load, was dem Browser mitteilt, die neue Version der Bibliothek mit Zugriff auf die Drittanbieter-Cookies zu laden.
[画像:Speicherzugriffs-Header-Workflow - ohne Speicherzugriffs-Berechtigung]
Sicherheitsüberlegungen
Verschiedene Sicherheitsmaßnahmen könnten dazu führen, dass ein Aufruf von Document.requestStorageAccess() fehlschlägt. Überprüfen Sie die nachstehende Liste, wenn Sie Probleme haben, eine Anfrage zum Laufen zu bringen:
-
Der Erlaubnisantrag muss mit einem Nutzerzustimmungs(transient activation) wie einem Tipp oder Klick verbunden sein. Dies verhindert, dass eingebettete Inhalte auf der Seite den Browser oder Benutzer mit übermäßigen Zugriffsanforderungen überfluten. Beachten Sie, dass dies nicht erforderlich ist, wenn:
- Die Erlaubnis zur Nutzung der API bereits für einen anderen Kontext mit demselben
<top-level site, embedded site>-Schlüssel erteilt wurde. - Der Anrufer ein oberstes Dokument oder eine gleichartige Seite des obersten Dokuments ist. In solchen Fällen muss
requestStorageAccess()wahrscheinlich überhaupt nicht aufgerufen werden.
- Die Erlaubnis zur Nutzung der API bereits für einen anderen Kontext mit demselben
-
Das Dokument und das oberste Dokument dürfen keinen
null-Ursprung haben. -
Ursprünge, die nie als Erstanbieter in Interaktion getreten sind, haben keine Vorstellung von Erstanbieter-Speicherplatz. Aus Sicht des Benutzers haben sie nur eine Drittanbieterbeziehung zu diesem Ursprung. Zugriffsanforderungen werden automatisch abgelehnt, wenn der Browser erkennt, dass der Benutzer in letzter Zeit nicht mit dem eingebetteten Inhalt in einem Erstanbieter-Kontext interagiert hat (in Firefox bedeutet "in letzter Zeit" innerhalb von 30 Tagen).
-
Das Fenster des Dokuments muss ein sicherer Kontext sein.
-
Sandboxed
<iframe>s können aus Sicherheitsgründen standardmäßig keinen Speicherzugriff erhalten. Die API stellt denallow-storage-access-by-user-activationSandbox-Token zur Verfügung, um dies zu behandeln. Das<iframe>muss dies enthalten, um Speicherzugriffsanforderungen zu aktivieren, zusammen mitallow-scriptsundallow-same-origin, um es zu erlauben, ein Skript auszuführen, um die API aufzurufen und sie in einem Ursprung auszuführen, der Cookies/Zustand haben kann:html<iframe sandbox="allow-storage-access-by-user-activation allow-scripts allow-same-origin"> ... </iframe> -
Die Nutzung dieser Funktion kann durch eine
storage-accessPermissions Policy, die auf Ihrem Server gesetzt ist, blockiert werden.
Hinweis: Das Dokument muss möglicherweise auch zusätzliche browserspezifische Prüfungen bestehen. Beispiele: Whitelists, Blacklists, geräteinterne Klassifikationen, Benutzereinstellungen, Anti-Clickjacking-Heuristiken oder das Anfordern einer ausdrücklichen Benutzererlaubnis.
Browser-spezifische Varianten
Obwohl die API-Oberfläche dieselbe ist, sollten Websites, die die Speicherzugriffs-API verwenden, Unterschiede im Ausmaß und Umfang des Zugriffs auf Drittanbieter-Cookies erwarten, den sie in verschiedenen Browsern erhalten, aufgrund ihrer unterschiedlichen Speicherzugriffsrichtlinien.
Chrome
- Cookies müssen explizit
SameSite=Nonegesetzt haben, da der Standardwert für ChromeSameSite=Laxist (SameSite=Noneist der Standard in Firefox und Safari). - Cookies müssen das Attribut
Securegesetzt haben. - Die Berechtigungsfreigaben für den Speicherzugriff laufen nach 30 Tagen Browsernutzung aus, wenn keine Nutzerinteraktion stattgefunden hat. Die Interaktion mit dem eingebetteten Inhalt verlängert dieses Limit um weitere 30 Tage. Dies geschieht nicht, wenn
Document.requestStorageAccessFor()aufgerufen wird, da der Benutzer bereits auf der Seite ist.
Firefox
- Wenn der eingebettete Ursprung
tracker.examplebereits Drittanbieter-Cookie-Zugriff auf den obersten Ursprungfoo.exampleerhalten hat und der Benutzer eine Seite vonfoo.examplebesucht, die eine Seite vontracker.exampleerneut einbettet, wird der eingebettete Ursprung sofort Drittanbieter-Cookie-Zugriff beim Laden haben, sofern das innerhalb von 30 Tagen geschieht. - Die Zugriffsberechtigungen laufen nach 30 Kalendertagen aus.
Die Dokumentation zu Firefox' neuer Speicherzugriffsrichtlinie für das Blockieren von Tracking-Cookies enthält eine detaillierte Beschreibung des Berechtigungsumfangs.
Safari
- Die Speicherzugriffsberechtigungen laufen nach 30 Tagen Browserverwendung aus, wenn keine Nutzerinteraktion stattgefunden hat. Ein erfolgreicher Einsatz der Speicherzugriffs-API setzt diesen Zähler zurück.
- Nachdem eine Einbettung die Speicherzugriffs-Berechtigung aktiviert hat und ihr Inhalt erneut angefordert wurde, werden Drittanbieter-Cookies mit Anfragen an die Website der eingebetteten Ressource gesendet, anstelle des Ursprungs. Safari verwendet immer noch ein älteres Design, das nicht der Ursprungsstrategie folgt.
Beispiele
- Siehe Verwendung der Speicherzugriffs-API für einen Implementierungsleitfaden mit Codebeispielen.
API-Methoden
Document.hasStorageAccess()-
Gibt ein
Promisezurück, das sich mit einem booleschen Wert auflöst, der angibt, ob das Dokument Zugriff auf Drittanbieter-Cookies hat. -
Neuer Name für
Document.hasStorageAccess(). Document.requestStorageAccess()-
Ermöglicht es Inhalten, die in einem Drittanbieter-Kontext geladen werden (z. B. in einem
<iframe>eingebettet), Zugriff auf Drittanbieter-Cookies und unpartitionierte Zustände anzufordern; gibt einPromisezurück, das erfüllt wird, wenn der Zugriff gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde. Document.requestStorageAccessFor()-
Eine nicht standardisierte veraltete Erweiterung der Speicherzugriffs-API, die es obersten Websites ermöglicht, Drittanbieter-Cookie-Zugriff im Namen eingebetteter Inhalte zu beantragen, die von einer anderen Website im selben related website set stammen. Gibt ein
Promisezurück, das erfüllt wird, wenn der Zugriff gewährt wurde, und abgelehnt wird, wenn der Zugriff verweigert wurde.
Hinweis: Benutzerinteraktionen propagieren sich zum Versprechen, das von diesen Methoden zurückgegeben wird, was den Anrufern ermöglicht, Maßnahmen zu ergreifen, die Benutzerinteraktionen erfordern, ohne einen zweiten Klick zu erfordern. Beispielsweise könnte ein Anrufer ein Pop-up-Fenster aus dem aufgelösten Versprechen heraus öffnen, ohne Firefox' Pop-up-Blocker auszulösen.
Ergänzungen für andere APIs
Permissions.query(), der"storage-access"-Feature-Name-
In unterstützenden Browsern kann dies abfragen, ob der Zugriff auf Drittanbieter-Cookies im Allgemeinen gewährt wurde, das heißt zu einem anderen samesite-Einbettung. Wenn ja, können Sie
requestStorageAccess()ohne Benutzerinteraktion aufrufen und das Versprechen wird automatisch erfüllt. Permissions.query(), der"top-level-storage-access"-Feature-Name-
Ein separater Feature-Name, der verwendet wird, um abzufragen, ob die Erlaubnis zum Zugriff auf Drittanbieter-Cookies bereits über
requestStorageAccessFor()gewährt wurde. Wenn ja, benötigen SierequestStorageAccessFor()nicht erneut aufzurufen.
Ergänzungen zu HTTP
Erlaubnisrichtlinie
Permissions-Policy: storage-access-
Die
storage-access-Richtlinienrichtlinie steuert, ob ein in einem Drittanbieter-Kontext geladenes Dokument (z. B. eingebettet in einem<iframe>) die Speicherzugriffs-API verwenden darf, um Zugriff auf unpartitionierte Cookies anzufordern.
Speicherzugriffs-Header
Sec-Fetch-Storage-Access-
Gibt den "Speicherzugriffsstatus" für den aktuellen Anforderungskontext an, der einer von
none,inactiveoderactivesein wird. Activate-Storage-Access-
Wird als Antwort auf
Sec-Fetch-Storage-Accessverwendet, um anzuzeigen, dass der Browser eine vorhandene Berechtigung für sicheren Zugriff aktivieren und die Anfrage mit Cookies wiederholen kann oder eine Ressource mit Cookie-Zugriff laden kann, wenn er bereits eine aktivierte Erlaubnis hat.
Spezifikationen
| Spezifikation |
|---|
| The Storage Access API> |
| Extending Storage Access API (SAA) to non-cookie storage> |
Browser-Kompatibilität
>api.Document.hasStorageAccess
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
api.Document.hasUnpartitionedCookieAccess
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
api.Document.requestStorageAccess
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
api.Document.requestStorageAccessFor
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
api.Permissions.permission_storage-access
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
http.headers.Activate-Storage-Access
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
http.headers.Sec-Fetch-Storage-Access
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.