Permissions-Policy

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

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

Weitere Informationen finden Sie im Hauptartikel Permissions Policy.

Header-Typ Antwort-Header
Verbotener Headername ja

Syntax

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

Die Permissions Policy-Direktive, auf die die Allowlist angewendet wird. Siehe unten Direktiven für eine Liste der erlaubten Direktivnamen.

<allowlist>

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

  • *: 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 den obersten und verschachtelten Browsing-Kontexten deaktiviert. Das Äquivalent für <iframe>-Attribute allow ist 'none'.
  • self: Die Funktion wird in diesem Dokument und in allen verschachtelten Browsing-Kontexten (<iframe>s) im selben Ursprung nur erlaubt. Die Funktion ist in Cross-Origin-Dokumenten in verschachtelten Browsing-Kontexten nicht erlaubt. self kann als Abkürzung für https://your-site.example.com angesehen werden. Das Äquivalent für <iframe>-Attribute allow ist self.
  • src: Die Funktion wird in diesem <iframe> erlaubt, solange das darin geladene Dokument aus demselben Ursprung wie die URL in seinem src-Attribut stammt. Dieser Wert wird nur im <iframe>-Attribut allow verwendet und ist der Standard-Allowlist-Wert in <iframe>s.
  • "<origin>": Die Funktion ist für bestimmte Ursprünge erlaubt (zum Beispiel "https://a.example.com"). Ursprünge sollten durch Leerzeichen getrennt sein. Beachten Sie, dass Ursprünge in <iframe>-Erlaubnis-Attributen nicht in Anführungszeichen stehen.

Die Werte * und () dürfen nur alleine 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 eine von *, self oder none für den Permissions-Policy-HTTP-Header ist und das Standardverhalten steuert, wenn sie nicht explizit in einer Richtlinie aufgeführt sind. Diese sind auf den individuellen Richtlinienreferenzseiten angegeben. Für <iframe>-Attribute allow ist das Standardverhalten immer src.

Wo unterstützt, können Sie Platzhalter in Permissions Policy-Ursprüngen verwenden. Dies bedeutet, dass Sie anstelle von mehreren verschiedenen Subdomains explizit in einer Allowlist alle in einem einzigen Ursprung mit einem Platzhalter angeben können.

Stattdessen 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 die Accelerometer-Schnittstelle sammeln darf.

ambient-light-sensor Experimentell

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

attribution-reporting Experimentell

Bestimmt, ob das aktuelle Dokument die Attribution Reporting API verwenden darf.

autoplay Experimentell

Bestimmt, ob das aktuelle Dokument Medien ungefragt über die HTMLMediaElement-Schnittstelle automatisch abspielen darf. Wenn diese Richtlinie deaktiviert ist und keine Benutzerinteraktionen vorhanden waren, wird das von HTMLMediaElement.play() zurückgegebene Promise mit einem NotAllowedError DOMException zurückgewiesen. Das autoplay-Attribut bei <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 zurückgewiesen.

browsing-topics Experimentell Nicht standardisiert

Bestimmt den Zugriff auf die Topics API. Wo eine Richtlinie die Nutzung der Topics API ausdrücklich verbietet, schlägt jeder Versuch, die Document.browsingTopics()-Methode aufzurufen oder eine Anfrage mit einem Sec-Browsing-Topics-Header zu senden, mit einem NotAllowedError DOMException fehl.

camera Experimentell

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

compute-pressure Experimentell

Bestimmt den Zugriff auf die Compute Pressure API.

display-capture Experimentell

Bestimmt, ob das aktuelle Dokument die Methode getDisplayMedia() verwenden darf, um Bildschirminhalte aufzunehmen. Wenn diese Richtlinie deaktiviert ist, wird das Promise, das von getDisplayMedia() zurückgegeben wird, mit einem NotAllowedError DOMException zurückgewiesen, wenn keine Berechtigung zur Aufzeichnung der Bildschirminhalte erteilt wird.

document-domain Experimentell

Bestimmt, ob das aktuelle Dokument document.domain setzen darf. Wenn diese Richtlinie deaktiviert ist, wird der Versuch, document.domain zu setzen, fehlschlagen und eine SecurityError DOMException auslösen.

encrypted-media Experimentell

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

fullscreen Experimentell

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

gamepad Experimentell

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

geolocation Experimentell

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

gyroscope Experimentell

Bestimmt, ob das aktuelle Dokument Informationen über die Orientierung 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 unkonventionellen oder exotischen Mensch-Maschine-Schnittstellengeräten wie alternativen Tastaturen oder Gamepads herzustellen.

identity-credentials-get Experimentell

Bestimmt, ob das aktuelle Dokument die Federated Credential Management API (FedCM) verwenden darf, insbesondere die Methode navigator.credentials.get() mit einer identity-Option. Wo diese Richtlinie die Nutzung der API verbietet, wird das Promise, das vom Aufruf get() zurückgegeben wird, mit einem NotAllowedError DOMException zurückgewiesen.

idle-detection Experimentell

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

local-fonts Experimentell

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

magnetometer Experimentell

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

microphone Experimentell

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

midi Experimentell

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

otp-credentials Experimentell

Bestimmt, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalpasswort (OTP) aus einer speziell formatierten SMS-Nachricht, die vom Server der App gesendet wurde, anzufordern, 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 soll.

serial Experimentell

Bestimmt, ob das aktuelle Dokument die Web Serial API verwenden darf, um mit seriellen Geräten zu kommunizieren, entweder direkt über einen seriellen Anschluss 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 Dokument, das in einem Drittanbieter-Kontext (d.h. eingebettet in ein <iframe>) geladen wurde, die Storage Access API verwenden darf, um Zugriff auf nicht partitionierte Cookies anzufordern.

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 an beliebige vom Benutzer gewählte Ziele zu teilen, z.B. mobile Apps.

window-management Experimentell

Bestimmt, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Bildschirmen 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 Geolokalisierung zu erlauben, würden Sie dies tun:

http
Permissions-Policy: geolocation=*

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

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

Mehrere Funktionen können gleichzeitig gesteuert werden, indem der Header mit einer durch Kommata getrennten Liste von Richtlinien gesendet wird oder indem ein separater Header für jede Richtlinie gesendet wird.

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

Damit ein <iframe> eine Funktion aktiviert hat, muss sein erlaubter Ursprung auch in der Allowlist für die übergeordnete Seite stehen. Aufgrund dieses Vererbungsgverhaltens ist es eine gute Idee, die breiteste akzeptable Unterstützung für eine Funktion im HTTP-Header anzugeben und dann den Teil der Unterstützung anzugeben, den Sie in jedem <iframe> benötigen.

Um allen Ursprüngen Zugriff auf 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 wechselt, wird die Richtlinie nicht auf den Ursprung angewendet, zu dem das <iframe> wechselt. Indem der Ursprung, zu dem das <iframe> wechselt, im allow-Attribut aufgeführt wird, wird die Permissions Policy, die auf das ursprüngliche <iframe> angewendet wurde, auf den Ursprung angewendet, zu dem das <iframe> navigiert.

Mehrere Funktionen können gleichzeitig durch das Einschließen einer durch Semikolon getrennten Liste von Richtliniendirektiven im allow-Attribut gesteuert werden.

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

Es ist erwähnenswert, dem src-Wert besondere Aufmerksamkeit zu schenken. Wir haben oben erwähnt, dass die Verwendung dieses Allowlist-Wertes bedeutet, dass die zugehörige Funktion in diesem <iframe> erlaubt wird, solange das darin geladene Dokument aus demselben Ursprung wie die URL in seinem src-Attribut stammt. Dieser Wert ist der Standard-Allowlist-Wert für Funktionen, die in allow aufgeführt sind, sodass die folgenden äquivalent sind:

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

Zugriff auf leistungsstarke Funktionen verweigern

SecureCorp Inc. möchte die Mikrofon- (zum Beispiel MediaDevices.getUserMedia()) und Geolocation-APIs in seiner Anwendung deaktivieren. Dies kann mit dem folgenden Antwort-Header erreicht werden:

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

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

Kombination von HTTP-Header- und <iframe>-Richtlinien

Zum Beispiel, nehmen wir an, wir möchten die Nutzung der Geolokalisierung auf unserem eigenen Ursprung und in eingebettetem Inhalt ermöglichen, der von unserem vertrauenswürdigen Werbenetzwerk stammt. Wir könnten die seitenweite Permissions Policy so einrichten:

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

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

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

Wenn ein anderer Ursprung in <iframe> geladen wird, hätte dieser keinen Zugriff auf Geolokalisierung:

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

Spezifikationen

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch