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
Response-Header bietet einen Mechanismus zum Erlauben und Verweigern der Nutzung von Browser-Features in einem Dokument oder innerhalb von <iframe>
-Elementen im Dokument.
Weitere Informationen finden Sie im Hauptartikel Permissions Policy.
Header-Typ | Response-Header |
---|---|
Verbotener Anfrage-Header | ja |
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>
-
Die Permissions-Policy-Direktive, auf die die
Erlaubnisliste
angewendet werden soll. Siehe Direktiven unten für eine Liste der zulässigen Direktivennamen. <allowlist>
-
Eine Erlaubnisliste ist eine Liste von Ursprüngen, die einen oder mehrere der folgenden Werte in Klammern enthalten, durch Leerzeichen getrennt:
*
(Wildcard)-
Das Feature wird in diesem Dokument und in allen verschachtelten Browsing-Kontexten (
<iframe>
s) unabhängig von ihrem Ursprung erlaubt. ()
(leere Erlaubnisliste)-
Das Feature ist in obersten und verschachtelten Browsing-Kontexten deaktiviert. Das Äquivalent für
<iframe>
allow
-Attribute ist'none'
. self
-
Das Feature wird in diesem Dokument und in allen verschachtelten Browsing-Kontexten (
<iframe>
s) nur im gleichen Ursprung erlaubt. Das Feature ist nicht in dokumentenübergreifenden Dokumenten in verschachtelten Browsing-Kontexten erlaubt.self
kann als Kurzform fürhttps://your-site.example.com
angesehen werden. Das Äquivalent für<iframe>
allow
-Attribute istself
. src
-
Das Feature wird in diesem
<iframe>
erlaubt, solange das darin geladene Dokument vom gleichen Ursprung wie die URL in seinem src-Attribut stammt. Dieser Wert wird nur im<iframe>
allow
-Attribut verwendet und ist der Standardwert für Erlaubnislisten in<iframe>
s. "<origin>"
-
Das Feature ist für spezifische Ursprünge erlaubt (zum Beispiel
"https://a.example.com"
). Ursprünge sollten durch Leerzeichen getrennt werden. Beachten Sie, dass Ursprünge in<iframe>
allow-Attributen nicht in Anführungszeichen gesetzt sind.
Die Werte
*
und()
dürfen nur eigenständig verwendet werden, währendself
undsrc
in Kombination mit einem oder mehreren Ursprüngen verwendet werden können.Hinweis: Direktiven haben eine Standard-Erlaubnisliste, die immer einer von
*
,self
odernone
für denPermissions-Policy
HTTP-Header ist und das Standardverhalten steuert, wenn sie nicht explizit in einer Richtlinie aufgeführt sind. Diese sind auf den individuellen Direktiven-Referenzseiten spezifiziert. Für<iframe>
allow
-Attribute ist das Standardverhalten immersrc
.
Wo unterstützt, können Sie Wildcards in Permissions-Policy-Ursprüngen einbeziehen. Dies bedeutet, dass statt mehrere verschiedene Subdomains explizit in einer Erlaubnisliste anzugeben, Sie alle in einem einzigen Ursprung mit einem Wildcard angeben können.
Anstatt
("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")
können Sie angeben
("https://example.com" "https://*.example.com")
Hinweis:
"https://*.example.com"
stimmt nicht mit "https://example.com"
überein.
Direktiven
accelerometer
Experimentell-
Kontrolliert, ob das aktuelle Dokument Informationen über die Beschleunigung des Geräts über die
Accelerometer
-Schnittstelle sammeln darf. ambient-light-sensor
Experimentell-
Kontrolliert, ob das aktuelle Dokument Informationen über die Lichtmenge in der Umgebung des Geräts über die
AmbientLightSensor
-Schnittstelle sammeln darf. attribution-reporting
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Attribution Reporting API verwenden darf.
autoplay
Experimentell-
Kontrolliert, ob das aktuelle Dokument Medien, die über die
HTMLMediaElement
-Schnittstelle angefordert werden, automatisch abspielen darf. Wenn diese Richtlinie deaktiviert ist und es keine Benutzeraktionen gab, wird die durchHTMLMediaElement.play()
zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. Das autoplay-Attribut an<audio>
- und<video>
-Elementen wird ignoriert. bluetooth
Experimentell-
Kontrolliert, ob die Nutzung der Web Bluetooth API erlaubt ist. Wenn diese Richtlinie deaktiviert ist, geben die Methoden des
Bluetooth
-Objekts, das vonNavigator.bluetooth
zurückgegeben wird, entwederfalse
zurück oder lehnen die zurückgegebenePromise
mit einemSecurityError
DOMException
ab. browsing-topics
Experimentell Nicht standardisiert-
Kontrolliert 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 einemSec-Browsing-Topics
-Header zu senden, mit einemNotAllowedError
DOMException
fehl. camera
Experimentell-
Kontrolliert, ob das aktuelle Dokument Video-Eingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird die durch
getUserMedia()
zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. compute-pressure
Experimentell-
Kontrolliert den Zugriff auf die Compute Pressure API.
cross-origin-isolated
Experimentell-
Kontrolliert, ob das aktuelle Dokument als cross-origin isolated behandelt werden kann.
deferred-fetch
Experimentell-
Kontrolliert die Zuweisung des
fetchLater()
-Kontingents des obersten Ursprungs. deferred-fetch-minimal
Experimentell-
Kontrolliert die Zuweisung des geteilten, ursprungsübergreifenden Subframe-
fetchLater()
-Kontingents. display-capture
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Methode
getDisplayMedia()
verwenden darf, um Bildschirm-Inhalte zu erfassen. Wenn diese Richtlinie deaktiviert ist, wird die durchgetDisplayMedia()
zurückgegebene Promise mit einemNotAllowedError
DOMException
abgelehnt, wenn keine Berechtigung zur Erfassung der Bildschirm-Inhalte erteilt wird. encrypted-media
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird die durch
Navigator.requestMediaKeySystemAccess()
zurückgegebenePromise
mit einemSecurityError
DOMException
abgelehnt. fullscreen
Experimentell-
Kontrolliert, ob das aktuelle Dokument
Element.requestFullscreen()
verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird die zurückgegebenePromise
mit einemTypeError
abgelehnt. gamepad
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Richtlinie deaktiviert ist, werden Aufrufe von
Navigator.getGamepads()
einenSecurityError
DOMException
auslösen, und die Eventsgamepadconnected
undgamepaddisconnected
werden nicht ausgelöst. geolocation
Experimentell-
Kontrolliert, ob das aktuelle Dokument die
Geolocation
Interface verwenden darf. Wenn diese Richtlinie deaktiviert ist, werden Aufrufe vongetCurrentPosition()
undwatchPosition()
dazu führen, dass die Rückrufe dieser Funktionen mit einemGeolocationPositionError
-Code vonPERMISSION_DENIED
ausgelöst werden. gyroscope
Experimentell-
Kontrolliert, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über die
Gyroscope
-Interface sammeln darf. hid
Experimentell-
Kontrolliert, ob das aktuelle Dokument die WebHID API verwenden darf, um eine Verbindung zu unüblichen oder exotischen Mensch-Maschine Schnittstellen-Geräten wie alternativen Tastaturen oder Gamepads herzustellen.
identity-credentials-get
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Federated Credential Management API (FedCM) verwenden darf, und insbesondere die Methode
navigator.credentials.get()
mit eineridentity
-Option. Wenn diese Richtlinie die Nutzung der API verbietet, wird die durch denget()
-Aufruf zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. idle-detection
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Idle Detection API verwenden darf, um zu erkennen, wann Benutzer mit ihren Geräten interagieren, beispielsweise um "verfügbar"/"abwesend"-Status in Chat-Anwendungen zu melden.
language-detector
Experimentell-
Kontrolliert den Zugriff auf die Sprachenerkennungsfunktionalitäten der Übersetzer- und Sprachenerkennungs-APIs.
local-fonts
Experimentell-
Kontrolliert, ob das aktuelle Dokument Daten über die lokal installierten Schriften des Benutzers durch die Methode
Window.queryLocalFonts()
sammeln darf (siehe auch die Local Font Access API). magnetometer
Experimentell-
Kontrolliert, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über die
Magnetometer
-Interface sammeln darf. microphone
Experimentell-
Kontrolliert, ob das aktuelle Dokument Audio-Eingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird die durch
MediaDevices.getUserMedia()
zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. midi
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird die durch
Navigator.requestMIDIAccess()
zurückgegebenePromise
mit einemSecurityError
DOMException
abgelehnt. otp-credentials
Experimentell-
Kontrolliert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalpasswort (OTP) aus einer speziell formatierten SMS-Nachricht abzurufen, die vom Server der App gesendet wird, z.B. via
navigator.credentials.get({otp: ..., ...})
. payment
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Payment Request API verwenden darf. Wenn diese Richtlinie aktiviert ist, wird der
PaymentRequest()
-Konstruktor einenSecurityError
DOMException
auslösen. picture-in-picture
Experimentell-
Kontrolliert, ob das aktuelle Dokument ein Video im Bild-in-Bild-Modus über die entsprechende API abspielen darf.
publickey-credentials-create
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um neue asymmetrische Schlüssel-Anmeldeinformationen zu erstellen, z.B. via
navigator.credentials.create({publicKey: ..., ...})
. publickey-credentials-get
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um bereits gespeicherte öffentliche Schlüssel-Anmeldeinformationen abzurufen, z.B. via
navigator.credentials.get({publicKey: ..., ...})
. screen-wake-lock
Experimentell-
Kontrolliert, 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-
Kontrolliert, ob das aktuelle Dokument die Web Serial API verwenden darf, um mit seriellen Geräten zu kommunizieren, die entweder direkt über einen seriellen Anschluss oder über USB- oder Bluetooth-Geräte emuliert werden.
speaker-selection
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Audio Output Devices API verwenden darf, um Lautsprecher aufzulisten und auszuwählen.
storage-access
Experimentell-
Kontrolliert, ob ein in einem Drittanbieter-Kontext geladenes Dokument (d.h. eingebettet in ein
<iframe>
) die Storage Access API verwenden darf, um Zugriff auf nicht partitionierte Cookies anzufordern. translator
Experimentell-
Kontrolliert den Zugriff auf die Übersetzungsfunktionalitäten der Übersetzer- und Sprachenerkennungs-APIs.
summarizer
Experimentell-
Kontrolliert den Zugriff auf die Summarizer API.
usb
Experimentell-
Kontrolliert, ob das aktuelle Dokument die WebUSB API verwenden darf.
-
Kontrolliert, ob das aktuelle Dokument die Nutzung von
Navigator.share()
der Web Share API erlaubt ist, um Text, Links, Bilder und andere Inhalte an beliebige Ziele nach Wahl des Benutzers zu teilen, z.B. mobile Apps. window-management
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Bildschirmen zu verwalten.
xr-spatial-tracking
Experimentell-
Kontrolliert, ob das aktuelle Dokument die Verwendung der WebXR Device API erlaubt ist, um mit einer WebXR-Session zu interagieren.
Beispiele
Grundlegende Nutzung
Permissions-Policy-Header
Um allen Ursprüngen Zugriff auf den Standort zu gewähren, würden Sie dies tun:
Permissions-Policy: geolocation=*
Oder um den Zugriff auf eine Teilmenge von Ursprüngen zu gewähren, würden Sie dies tun:
Permissions-Policy: geolocation=(self "https://a.example.com" "https://b.example.com")
Mehrere Features können zur gleichen Zeit kontrolliert werden, indem der Header mit einer durch Kommas getrennten Liste von Richtlinien gesendet wird, oder indem für jede Richtlinie ein separater Header gesendet wird.
Zum Beispiel, die folgenden sind gleichwertig:
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>
ein Feature aktiviert hat, muss der erlaubte Ursprung auch in der Erlaubnisliste für die Hauptseite enthalten sein. Aufgrund dieses Vererbungsverhaltens ist es eine gute Idee, die breiteste akzeptable Unterstützung für ein Feature im HTTP-Header anzugeben und dann den Teilbereich der Unterstützung, den Sie in jedem <iframe>
benötigen, zu spezifizieren.
Um allen Ursprüngen Zugriff auf den Standort zu gewähren, würden Sie dies tun:
<iframe src="https://example.com" allow="geolocation *"></iframe>
Um eine Richtlinie auf den aktuellen Ursprung und andere anzuwenden, würden Sie dies tun:
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com"></iframe>
Das 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. Indem Sie den Ursprung, zu dem das <iframe>
navigiert, im allow
-Attribut auflisten, wird die auf das ursprüngliche <iframe>
angewendete Permissions Policy auf den Ursprung angewendet, zu dem das <iframe>
navigiert.
Mehrere Features können zur gleichen Zeit kontrolliert werden, indem eine durch Semikolons getrennte Liste von Richtlinien-Direktiven im allow
-Attribut eingeschlossen wird.
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>
Es ist erwähnenswert, den src
-Wert speziell zu erwähnen. Wir haben oben erwähnt, dass die Verwendung dieses Wertes in der Erlaubnisliste bedeuten würde, dass das zugehörige Feature in diesem <iframe>
erlaubt ist, solange das darin geladene Dokument vom gleichen Ursprung wie die URL in seinem src-Attribut stammt. Dieser Wert ist der Standardwert für Erlaubnislisten für Features, die in allow
aufgeführt sind, sodass die folgenden gleichwertig sind:
<iframe src="https://example.com" allow="geolocation 'src'">
<iframe src="https://example.com" allow="geolocation"></iframe
></iframe>
Zugriff auf leistungsstarke Features verweigern
SecureCorp Inc. möchte die Mikrofon- (zum Beispiel MediaDevices.getUserMedia()
) und Geolocation
-APIs in seiner Anwendung deaktivieren. Dies kann mit dem folgenden Response-Header erfolgen:
Permissions-Policy: microphone=(), geolocation=()
Durch die Angabe von ()
für die Ursprungs-Liste werden die angegebenen Features für alle Browsing-Kontexte deaktiviert (dies schließt alle <iframe>
s ein), unabhängig von ihrem Ursprung.
Kombination von HTTP-Header und <iframe>
-Richtlinien
Zum Beispiel, nehmen wir an, dass wir die Nutzung von Geolocation auf unserem eigenen Ursprung und in eingebettetem Inhalt von unserem vertrauenswürdigen Werbenetzwerk ermöglichen wollten. Wir könnten die seitenweite Permissions Policy so einrichten:
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 einstellen:
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>
Wenn ein anderer Ursprung in das <iframe>
geladen wird, hätte er keinen Zugriff auf Geolocation:
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>
Spezifikationen
Specification |
---|
Permissions Policy # permissions-policy-http-header-field |