Permissions-Policy header

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Der HTTP Permissions-Policy Antwort-Header bietet einen Mechanismus, um die Nutzung von Browser-Funktionen in einem Dokument oder innerhalb eines beliebigen <iframe> Elements im Dokument zu erlauben oder zu verweigern.

Für weitere Informationen siehe den Hauptartikel zur Permissions Policy.

Headertyp Antwort-Header
Verboter Anfrage-Header ja

Syntax

http
Permissions-Policy: <directive>=<allowlist>
<directive>

Die Permissions Policy-Direktive, auf die die allowlist angewendet werden soll. Siehe Directives unten für eine Liste der erlaubten Direktivnamen.

<allowlist>

Eine Allowlist ist eine Liste von Ursprüngen, die einen oder mehrere der folgenden in Klammern enthaltenen Werte enthält, durch Leerzeichen getrennt:

* (Wildcard)

Die Funktion wird in diesem Dokument und in allen verschachtelten Browsing-Kontexten (<iframe>s) unabhängig von ihrem Ursprung erlaubt.

() (leere Allowlist)

Die Funktion ist in obersten und verschachtelten Browsing-Kontexten deaktiviert. Das Äquivalent für <iframe> allow Attribute ist 'none'.

self

Die Funktion wird in diesem Dokument und in allen verschachtelten Browsing-Kontexten (<iframe>s) desselben Ursprungs nur erlaubt. Die Funktion ist in Dokumenten mit unterschiedlichem Ursprung in verschachtelten Browsing-Kontexten nicht erlaubt. self kann als Abkürzung für https://your-site.example.com betrachtet werden. Das Äquivalent für <iframe> allow Attribute ist self.

src

Die Funktion wird in diesem <iframe> erlaubt, solange das in ihm geladene Dokument vom selben Ursprung wie die URL in seinem src Attribut stammt. Dieser Wert wird nur im <iframe> allow Attribut verwendet und ist der Standard allowlist Wert in <iframe>s.

"<origin>"

Die Funktion ist für bestimmte Ursprünge erlaubt (z.B. "https://a.example.com"). Ursprünge sollten durch Leerzeichen getrennt werden. Beachten Sie, dass Ursprünge in <iframe> erlauben Attributen nicht in Anführungszeichen gesetzt sind.

Die Werte * und () dürfen nur allein verwendet werden, während self und src in Kombination mit einem oder mehreren Ursprüngen verwendet werden können.

Hinweis: Direktiven haben eine Standard-allowlist, die immer eines der Werte *, self oder none für den Permissions-Policy HTTP-Header ist und das Standardverhalten regelt, wenn sie nicht explizit in einer Richtlinie aufgelistet sind. Diese sind auf den individuellen Direktivreferenz-Seiten angegeben. Für <iframe> allow Attribute ist das Standardverhalten immer src.

Wo unterstützt, können Sie Wildcards in Ursprüngen der Permissions Policy einfügen. Das bedeutet, dass Sie anstatt mehrere verschiedene Subdomänen ausdrücklich in einer Allowlist anzugeben, sie alle in einem einzigen Ursprung mit einem Wildcard angeben können.

Anstelle von

http
("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")

Können Sie angeben

http
("https://example.com" "https://*.example.com")

Hinweis:>"https://*.example.com" entspricht nicht "https://example.com".

Direktiven

accelerometer Experimentell

Bestimmt, ob das aktuelle Dokument Informationen über die Beschleunigung des Geräts über das Accelerometer Interface sammeln darf.

ambient-light-sensor Experimentell

Bestimmt, ob das aktuelle Dokument Informationen über die Lichtmenge in der Umgebung des Geräts über das AmbientLightSensor Interface sammeln darf.

attribution-reporting Experimentell

Bestimmt, ob das aktuelle Dokument die Nutzung der Attribution Reporting API erlaubt ist.

autoplay Experimentell

Bestimmt, ob das aktuelle Dokument automatisch Medieninhalte abspielen darf, die über das HTMLMediaElement Interface angefordert werden. Wenn diese Richtlinie deaktiviert ist und keine Benutzerinteraktionen erfolgt sind, wird das von HTMLMediaElement.play() zurückgegebene Promise mit einem NotAllowedError DOMException abgelehnt. Das autoplay Attribut auf <audio> und <video> Elementen wird ignoriert.

bluetooth Experimentell

Bestimmt, ob die Nutzung der Web Bluetooth API erlaubt ist. Wenn diese Richtlinie deaktiviert ist, werden die Methoden des Bluetooth Objekts, das von Navigator.bluetooth zurückgegeben wird, entweder false zurückgeben oder das zurückgegebene Promise mit einem SecurityError DOMException ablehnen.

browsing-topics Experimentell Nicht standardisiert

Bestimmt den Zugriff auf die Topics API. Wenn eine Richtlinie die Nutzung der Topics API speziell verbietet, werden alle Versuche, die Document.browsingTopics() Methode zu rufen oder eine Anfrage mit einem Sec-Browsing-Topics Header zu senden, mit einem NotAllowedError DOMException fehlschlagen.

camera Experimentell

Bestimmt, ob das aktuelle Dokument Videogeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von getUserMedia() zurückgegebene Promise mit einem NotAllowedError DOMException abgelehnt.

compute-pressure Experimentell

Bestimmt den Zugriff auf die Compute Pressure API.

cross-origin-isolated Experimentell

Bestimmt, ob das aktuelle Dokument als cross-origin isoliert behandelt werden kann.

deferred-fetch Experimentell

Bestimmt die Zuteilung des fetchLater() Kontingents des obersten Ursprungs.

deferred-fetch-minimal Experimentell

Bestimmt die Zuteilung des gemeinsamen cross-origin Subframe fetchLater() Kontingents.

display-capture Experimentell

Bestimmt, ob das aktuelle Dokument die getDisplayMedia() Methode verwenden darf, um Bildschirminhalte zu erfassen. Wenn diese Richtlinie deaktiviert ist, wird das von getDisplayMedia() zurückgegebene Promise mit einem NotAllowedError DOMException abgelehnt, wenn keine Erlaubnis zur Anzeigeerfassung erteilt wird.

encrypted-media Experimentell

Bestimmt, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von Navigator.requestMediaKeySystemAccess() zurückgegebene Promise mit einem SecurityError DOMException abgelehnt.

fullscreen Experimentell

Bestimmt, ob das aktuelle Dokument Element.requestFullscreen() verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das zurückgegebene Promise mit einem TypeError abgelehnt.

gamepad Experimentell

Bestimmt, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Richtlinie deaktiviert ist, werden Aufrufe von Navigator.getGamepads() einen SecurityError DOMException auslösen, und die gamepadconnected und gamepaddisconnected Ereignisse werden nicht ausgelöst.

geolocation Experimentell

Bestimmt, ob das aktuelle Dokument die Geolocation Schnittstelle verwenden darf. Wenn diese Richtlinie deaktiviert ist, werden Aufrufe von getCurrentPosition() und watchPosition() dazu führen, dass die Rückruf-Funktionen dieser Funktionen mit einem GeolocationPositionError Code von PERMISSION_DENIED aufgerufen werden.

gyroscope Experimentell

Bestimmt, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über die Gyroscope Schnittstelle sammeln darf.

hid Experimentell

Bestimmt, ob das aktuelle Dokument die WebHID API verwenden darf, um eine Verbindung zu ungewöhnlichen oder exotischen menschlichen Schnittstellengeräten wie alternativen Tastaturen oder Gamepads herzustellen.

identity-credentials-get Experimentell

Bestimmt, ob das aktuelle Dokument die Federated Credential Management API (FedCM) und speziell die navigator.credentials.get() Methode mit einer identity Option verwenden darf. Wenn diese Richtlinie die Nutzung der API verbietet, wird das von dem get() Aufruf zurückgegebene Promise mit einem NotAllowedError DOMException abgelehnt.

idle-detection Experimentell

Bestimmt, ob das aktuelle Dokument die Idle Detection API verwenden darf, um zu erkennen, wenn Benutzer mit ihren Geräten interagieren, beispielsweise um in Chat-Anwendungen den Status "verfügbar"/"abwesend" zu melden.

language-detector Experimentell

Bestimmt den Zugriff auf die Sprachenerkennungsfunktionalität der Translator and Language Detector APIs.

local-fonts Experimentell

Bestimmt, ob das aktuelle Dokument Daten zu den lokal installierten Schriften des Benutzers über die Window.queryLocalFonts() Methode sammeln darf (siehe auch die Local Font Access API).

magnetometer Experimentell

Bestimmt, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über die Magnetometer Schnittstelle sammeln darf.

microphone Experimentell

Bestimmt, ob das aktuelle Dokument Audio-Eingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von MediaDevices.getUserMedia() zurückgegebene Promise mit einem NotAllowedError DOMException abgelehnt.

midi Experimentell

Bestimmt, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von Navigator.requestMIDIAccess() zurückgegebene Promise mit einem SecurityError DOMException abgelehnt.

otp-credentials Experimentell

Bestimmt, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalpasswort (OTP) aus einer speziell formatierten SMS zu beantragen, die vom Server der App gesendet wird, d.h. über navigator.credentials.get({otp: ..., ...}).

payment Experimentell

Bestimmt, ob das aktuelle Dokument die Payment Request API verwenden darf. Wenn diese Richtlinie aktiviert ist, wird der PaymentRequest() Konstruktor einen SecurityError DOMException auslösen.

picture-in-picture Experimentell

Bestimmt, ob das aktuelle Dokument ein Video im Bild-in-Bild-Modus über die entsprechende API abspielen darf.

publickey-credentials-create Experimentell

Bestimmt, ob das aktuelle Dokument die Web Authentication API verwenden darf, um neue asymmetrische Schlüsselanmeldedaten zu erstellen, d.h. über navigator.credentials.create({publicKey: ..., ...}).

publickey-credentials-get Experimentell

Bestimmt, ob das aktuelle Dokument die Web Authentication API verwenden darf, um bereits gespeicherte Public-Key-Anmeldedaten abzurufen, d.h. über navigator.credentials.get({publicKey: ..., ...}).

screen-wake-lock Experimentell

Bestimmt, ob das aktuelle Dokument die Screen Wake Lock API verwenden darf, um anzuzeigen, dass das Gerät den Bildschirm nicht ausschalten oder dimmen sollte.

serial Experimentell

Bestimmt, ob das aktuelle Dokument die Web Serial API verwenden darf, um mit seriellen Geräten zu kommunizieren, die entweder direkt über einen seriellen Anschluss angeschlossen sind oder über USB- oder Bluetooth-Geräte, die einen seriellen Anschluss emulieren.

speaker-selection Experimentell

Bestimmt, ob das aktuelle Dokument die Audio Output Devices API verwenden darf, um Lautsprecher aufzulisten und auszuwählen.

storage-access Experimentell

Bestimmt, ob ein in einem Drittanbieter-Kontext geladenes Dokument (d.h. eingebettet in einem <iframe>) die Verwendung der Storage Access API beantragen darf, um Zugriff auf nicht partitionierte Cookies zu erhalten.

translator Experimentell

Bestimmt den Zugriff auf die Übersetzungsfunktionalität der Translator and Language Detector APIs.

summarizer Experimentell

Bestimmt den Zugriff auf die Summarizer API.

usb Experimentell

Bestimmt, ob das aktuelle Dokument die WebUSB API verwenden darf.

web-share Experimentell

Bestimmt, ob das aktuelle Dokument die Navigator.share() der Web Share API verwenden darf, um Text, Links, Bilder und andere Inhalte zu beliebigen Zielen der Wahl des Benutzers zu teilen, z. B. mobilen Apps.

window-management Experimentell

Bestimmt, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Displays zu verwalten.

xr-spatial-tracking Experimentell

Bestimmt, ob das aktuelle Dokument die WebXR Device API verwenden darf, um mit einer WebXR-Sitzung zu interagieren.

Beispiele

Grundlegende Verwendung

Permissions-Policy Header

Um allen Ursprüngen Zugriff auf die Geolokalisierung zu erlauben, würden Sie dies tun:

http
Permissions-Policy: geolocation=*

Oder um den Zugriff auf eine Teilmenge von Ursprüngen zu beschränken, würden Sie dies tun:

http
Permissions-Policy: geolocation=(self "https://a.example.com" "https://b.example.com")

Mehrere Funktionen können gleichzeitig durch Senden des Headers mit einer durch Kommas getrennten Liste von Richtlinien oder durch Senden eines separaten Headers für jede Richtlinie gesteuert werden.

Zum Beispiel sind die folgenden äquivalent:

http
Permissions-Policy: picture-in-picture=(), geolocation=(self https://example.com/), camera=*

Permissions-Policy: picture-in-picture=()
Permissions-Policy: geolocation=(self https://example.com/)
Permissions-Policy: camera=*

iframes

Für ein <iframe>, das eine Funktion aktiviert haben soll, muss der erlaubte Ursprung auch in der Allowlist der übergeordneten Seite enthalten sein. Aufgrund dieses Vererbungsmusters ist es eine gute Idee, die größtmögliche Unterstützung für eine Funktion im HTTP-Header zu spezifizieren und dann den benötigten Unterstützungsbereich in jedem <iframe> anzugeben.

Um allen Ursprüngen Zugriff auf die Geolokalisierung zu erlauben, würden Sie dies tun:

html
<iframe src="https://example.com" allow="geolocation *"></iframe>

Um eine Richtlinie auf den aktuellen Ursprung und andere anzuwenden, würden Sie dies tun:

html
<iframe
  src="https://example.com"
  allow="geolocation 'self' https://a.example.com https://b.example.com"></iframe>

Dies ist wichtig: Standardmäßig, wenn ein <iframe> zu einem anderen Ursprung navigiert, wird die Richtlinie nicht auf den Ursprung angewendet, zu dem das <iframe> navigiert. Durch das Auflisten des Ursprungs, zu dem das <iframe> navigiert, im allow Attribut, wird die Permissions Policy, die ursprünglich auf das <iframe> angewendet wurde, auf den Ursprung angewendet, zu dem das <iframe> navigiert.

Mehrere Funktionen können gleichzeitig gesteuert werden, indem eine durch Semikolon getrennte Liste von Richtliniendirektiven im allow Attribut enthalten ist.

html
<iframe
  src="https://example.com"
  allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>

Es lohnt sich, dem src Wert besondere Aufmerksamkeit zu widmen. Wir haben oben erwähnt, dass die Verwendung dieses Allowlist-Werts bedeutet, dass die zugehörige Funktion in diesem <iframe> erlaubt wird, solange das darin geladene Dokument vom selben Ursprung wie die URL in seinem src Attribut stammt. Dieser Wert ist der Standard allowlist Wert für Funktionen, die in allow aufgelistet sind, sodass die folgenden äquivalent sind:

html
<iframe src="https://example.com" allow="geolocation 'src'">
  <iframe src="https://example.com" allow="geolocation"></iframe
></iframe>

Den Zugriff auf leistungsstarke Funktionen verweigern

SecureCorp Inc. möchte die Verwendung der Mikrofon (z.B. MediaDevices.getUserMedia()) und der Geolocation APIs in ihrer Anwendung deaktivieren. Sie kann dies mit dem folgenden Antwort-Header tun:

http
Permissions-Policy: microphone=(), geolocation=()

Durch die Angabe von () für die Ursprungsmittel werden die angegebenen Funktionen für alle Browsing-Kontexte (einschließlich aller <iframe>s) deaktiviert, unabhängig von ihrem Ursprung.

Kombination aus HTTP-Header und <iframe>-Richtlinien

Angenommen, wir möchten die Nutzung der Geolokalisierung auf unserem eigenen Ursprung und in eingebetteten Inhalten, die von unserem vertrauenswürdigen Werbenetzwerk stammen, aktivieren. Wir könnten die seitenweite Permissions Policy wie folgt einrichten:

http
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)

In unseren Ad-<iframe>s könnten wir den Zugriff auf den Ursprung https://trusted-ad-network.com wie folgt festlegen:

html
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>

Wenn ein anderer Ursprung in <iframe> geladen würde, hätte er keinen Zugriff auf die Geolokalisierung:

html
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>

Spezifikationen

Specification
Permissions Policy
# permissions-policy-http-header-field

Browser-Kompatibilität

Siehe auch