HTTPQUERY
Deutsch

Permissions-Policy

Verwendung

Der Antwort-Header Permissions-Policy schränkt ein, welche Browserfunktionen im aktuellen Frame erlaubt sind. Jede Richtlinie verbindet eine Funktionsdirektive mit einer Zulassungsliste, die festlegt, welche Origins auf die Funktion zugreifen.

Permissions-Policy: <directive>=<allowlist>

Hinweis

Eine empfohlene Ausgangsrichtlinie deaktiviert Funktionen, die die Website nicht nutzt: Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=(), bluetooth=(). Sicherheitsscanner melden fehlende Permissions-Policy-Header. Eine minimale Richtlinie behebt diesen Befund, ohne die Funktionalität der Website zu beeinträchtigen.

Hinweis

Der Mechanismus Permissions-Policy war zuvor als Feature Policy bekannt.

Direktiven

Der Direktivname bezeichnet die zu steuernde Browserfunktion. Eine nicht erschöpfende Liste standardisierter Direktiven:

Hinweis

Die Direktive interest-cohort diente dazu, Federated Learning of Cohorts (FLoC) zu blockieren. Google gab FLoC 2022 auf und ersetzte die API durch die Topics API. Die Direktive interest-cohort wurde aus den Browserimplementierungen entfernt.

Werte der Zulassungsliste

Die steuert, welche Origins die Funktion nutzen:

Hinweis

Die Direktive unload blockiert unload-Event-Handler für die Origin. Permissions-Policy: unload=() zu setzen, hindert Erstanbietercode, Drittanbieterskripte und Browsererweiterungen daran, unload-Handler zu registrieren. Das ist für die Leistung des Back-Forward-Cache (bfcache) bedeutsam, denn unload-Handler verhindern, dass der Browser Seiten für sofortige Vor- und Zurück-Navigation zwischenspeichert. Chrome schafft unload-Events schrittweise vollständig ab, beginnend bei Websites mit hohem Traffic und ausgeweitet auf alle Websites. unload=() zu setzen, bedeutet die sofortige Teilnahme an dieser Abschaffung und garantiert die bfcache-Eignung unabhängig vom Zeitplan der Einführung.

Beispiel

Im folgenden Beispiel gibt der Server an, dass die Funktion geolocation in allen Kontexten deaktiviert sein soll.

Permissions-Policy: geolocation=()

Im folgenden Beispiel gibt der Server an, dass die Funktion encrypted-media für alle Origins außer report.example.re deaktiviert sein soll.

Permissions-Policy: encrypted-media=("https://report.example.re")

Im folgenden Beispiel gibt der Server an, dass die Funktion microphone für alle Origins deaktiviert sein soll, ausgenommen die eigene Origin und solche mit der Origin example.re.

Permissions-Policy: microphone=(self "https://example.re")

Blockieren von unload-Handlern zur Verbesserung der bfcache-Eignung. Damit wird verhindert, dass Drittanbieterskripte und Erweiterungen unload-Events registrieren, die die Leistung der Vor- und Zurück-Navigation beeinträchtigen.

Permissions-Policy: unload=()

Fehlersuche

Verstöße gegen die Permissions-Policy treten in den meisten Fällen still auf: Die blockierte Funktion liefert einen Ablehnungszustand zurück oder wirft einen Fehler, ohne dass eine sichtbare Browserabfrage erscheint.

Funktion wird in einem iframe blockiert, weil das Attribut allow fehlt. Selbst wenn die übergeordnete Seite eine Funktion erlaubt, benötigen eingebettete iframes ein explizites allow-Attribut, um auf die Funktion zuzugreifen. Fügen Sie das Attribut dem iframe-Tag hinzu:

Geolocation, camera oder microphone funktionieren nach dem Setzen der Richtlinie nicht. Eine Richtlinie wie Permissions-Policy: geolocation=() deaktiviert die Funktion für alle Origins, einschließlich der Seite selbst. Um die Funktion nur auf derselben Origin zu erlauben, verwenden Sie geolocation=(self). Um zusätzlich eine bestimmte eingebettete Origin zuzulassen, verwenden Sie geolocation=(self “https://maps.example.re”). Für eine Funktion, die die Richtlinie bereits abgelehnt hat, fragt der Browser den Nutzer niemals.

Der Platzhalter * funktioniert nicht für alle Funktionen. Manche Funktionen unterstützen den Zulassungslistenwert * nicht und sind auf explizite Origin-Listen beschränkt. Wenn * keine Wirkung zeigt, geben Sie jede erlaubte Origin einzeln an. Prüfen Sie die Browserkonsole auf Warnungen zu nicht erkannten oder nicht unterstützten Zulassungslistenwerten.

Migration von Feature-Policy zu Permissions-Policy. Der alte Feature-Policy-Header verwendet eine andere Syntax: Feature-Policy: geolocation ‘self’ gegenüber Permissions-Policy: geolocation=(self). Browser, die Permissions-Policy unterstützen, ignorieren Feature-Policy, wenn beide Header vorhanden sind. Aktualisieren Sie den Header-Namen und wandeln Sie die Syntax um: Ersetzen Sie Leerzeichen durch =, setzen Sie Origin-Listen in Klammern und entfernen Sie die einfachen Anführungszeichen um self und none (verwenden Sie () statt ‘none’).

Debugging mit document.featurePolicy.allowsFeature(). Öffnen Sie in Chromium-basierten Browsern die DevTools-Konsole und führen Sie document.featurePolicy.allowsFeature(‘camera’) aus, um zu prüfen, ob eine Funktion im aktuellen Kontext erlaubt ist. Das liefert true oder false zurück. Für iframe-Kontexte übergeben Sie die Origin als zweites Argument: document.featurePolicy.allowsFeature(‘camera’, ‘https://embed.example.re’). Firefox verwendet document.permissionsPolicy statt document.featurePolicy.