Permissions-Policy
Please take two minutes to fill out our short survey.
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 Verwendung von Browserfunktionen in einem Dokument oder innerhalb von <iframe>
-Elementen im Dokument zu erlauben oder zu verweigern.
Für weitere Informationen siehe den Hauptartikel zur Permissions Policy.
Header-Typ | Antwort-Header |
---|---|
Unzulässiger Anfrage-Header | Ja |
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>
-
Die Permissions Policy-Direktive, auf die die
allowlist
angewendet werden soll. Eine Liste der zulässigen Direktivenamen finden Sie unten unter Directives. <allowlist>
-
Eine Allowlist ist eine Liste von Ursprüngen, die einen oder mehrere der folgenden Werte in Klammern enthalten, getrennt durch Leerzeichen:
*
(Wildcard)-
Die Funktion wird in diesem Dokument und allen verschachtelten Browserkontexten (
<iframe>
s) unabhängig von ihrem Ursprung erlaubt. ()
(leere Allowlist)-
Die Funktion ist in ober- und untergeordneten Browserkontexten deaktiviert. Das Äquivalent für
<iframe>
allow
-Attribute ist'none'
. self
-
Die Funktion wird in diesem Dokument und in allen verschachtelten Browserkontexten (
<iframe>
s) desselben Ursprungs erlaubt. Die Funktion ist in Cross-Origin-Dokumenten in verschachtelten Browserkontexten nicht erlaubt.self
kann als Kurzform fürhttps://your-site.example.com
angesehen werden. Das Äquivalent für<iframe>
allow
-Attribute istself
. src
-
Die Funktion wird in diesem
<iframe>
erlaubt, solange das darin 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 Standardwert für die Allowlist in<iframe>
s. "<origin>"
-
Die Funktion 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 stehen.
Die Werte
*
und()
dürfen nur allein verwendet werden, währendself
undsrc
in Kombination mit einem oder mehreren Ursprüngen verwendet werden können.Hinweis: Direktiven haben eine Standard-Allowlist, die immer eine von
*
,self
odernone
für denPermissions-Policy
HTTP-Header ist und das Standardverhalten bestimmt, wenn sie nicht ausdrücklich in einer Policy aufgeführt sind. Diese sind auf den einzelnen Direktivreferenzseiten angegeben. Für<iframe>
allow
-Attribute ist das Standardverhalten immersrc
.
Wo unterstützt, können Sie Wildcards in Permissions Policy-Ursprüngen aufnehmen. Dies bedeutet, dass Sie anstelle mehrerer unterschiedlicher Subdomains in einer Allowlist alle in einem einzigen Ursprung mit einem Wildcard angeben können.
Anstatt also
("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"
entspricht nicht "https://example.com"
.
Direktiven
accelerometer
Experimentell-
Steuert, ob das aktuelle Dokument Informationen über die Beschleunigung des Geräts über die
Accelerometer
-Schnittstelle sammeln darf. ambient-light-sensor
Experimentell-
Steuert, ob das aktuelle Dokument Informationen über die Lichtmenge in der Umgebung des Geräts über die
AmbientLightSensor
-Schnittstelle sammeln darf. attribution-reporting
Experimentell-
Steuert, ob das aktuelle Dokument die Attribution Reporting API nutzen darf.
autoplay
Experimentell-
Steuert, ob das aktuelle Dokument Medien, die über die
HTMLMediaElement
-Schnittstelle angefordert wurden, automatisch abspielen darf. Wenn diese Policy deaktiviert ist und keine Benutzerinteraktionen stattgefunden haben, lehnt das vonPromise
zurückgegebeneHTMLMediaElement.play()
mit einemNotAllowedError
-DOMException
ab. Das Autoplay-Attribut auf<audio>
- und<video>
-Elementen wird ignoriert. bluetooth
Experimentell-
Steuert, ob die Nutzung der Web Bluetooth API erlaubt ist. Wenn diese Policy deaktiviert ist, geben die Methoden des
Bluetooth
-Objekts, das vonNavigator.bluetooth
zurückgegeben wird, entwederfalse
zurück oder lehnen das zurückgegebenePromise
mit einemSecurityError
-DOMException
ab. browsing-topics
Experimentell Nicht standardisiert-
Steuert den Zugriff auf die Topics API. Wenn eine Policy die Nutzung der Topics API speziell untersagt, schlagen alle Versuche, die
Document.browsingTopics()
-Methode aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics
-Header zu senden, mit einemNotAllowedError
-DOMException
fehl. camera
Experimentell-
Steuert, ob das aktuelle Dokument Videogeräte verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das von
Promise
zurückgegebenegetUserMedia()
mit einemNotAllowedError
-DOMException
ab. compute-pressure
Experimentell-
Steuert den Zugriff auf die Compute Pressure API.
cross-origin-isolated
Experimentell-
Steuert, ob das aktuelle Dokument als cross-origin isolated behandelt werden kann.
display-capture
Experimentell-
Steuert, ob das aktuelle Dokument die
getDisplayMedia()
-Methode verwenden darf, um Bildschirm-Inhalte aufzunehmen. Wenn diese Policy deaktiviert ist, lehnt das vongetDisplayMedia()
zurückgegebene Promise mit einemNotAllowedError
-DOMException
ab, wenn keine Berechtigung zur Aufnahme der Bildschirm-Inhalte erhalten wurde. document-domain
Experimentell-
Steuert, ob das aktuelle Dokument
document.domain
setzen darf. Wenn diese Policy deaktiviert ist, schlägt der Versuch,document.domain
zu setzen, fehl und löst eineSecurityError
-DOMException
aus. encrypted-media
Experimentell-
Steuert, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das von
Promise
zurückgegebeneNavigator.requestMediaKeySystemAccess()
mit einemSecurityError
-DOMException
ab. fullscreen
Experimentell-
Steuert, ob das aktuelle Dokument
Element.requestFullscreen()
verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das zurückgegebenePromise
mit einemTypeError
ab. gamepad
Experimentell-
Steuert, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Policy deaktiviert ist, werfen Aufrufe von
Navigator.getGamepads()
eineSecurityError
-DOMException
, und diegamepadconnected
- undgamepaddisconnected
-Ereignisse werden nicht ausgelöst. geolocation
Experimentell-
Steuert, ob das aktuelle Dokument die
Geolocation
-Schnittstelle verwenden darf. Wenn diese Policy deaktiviert ist, führen Aufrufe vongetCurrentPosition()
undwatchPosition()
dazu, dass die Callbacks dieser Funktionen mit einemGeolocationPositionError
-Code vonPERMISSION_DENIED
aufgerufen werden. gyroscope
Experimentell-
Steuert, ob das aktuelle Dokument Informationen über die Orientierung des Geräts über die
Gyroscope
-Schnittstelle sammeln darf. hid
Experimentell-
Steuert, ob das aktuelle Dokument die WebHID API verwenden darf, um eine Verbindung zu ungewöhnlichen oder exotischen Human Interface Devices wie alternativen Tastaturen oder Gamepads herzustellen.
identity-credentials-get
Experimentell-
Steuert, ob das aktuelle Dokument die Federated Credential Management API (FedCM) und insbesondere die
navigator.credentials.get()
-Methode mit eineridentity
-Option verwenden darf. Wenn diese Policy die Nutzung der API untersagt, lehnt das vonget()
zurückgegebenePromise
mit einemNotAllowedError
-DOMException
ab. idle-detection
Experimentell-
Steuert, ob das aktuelle Dokument die Idle Detection API verwenden darf, um zu erkennen, wann Benutzer mit ihren Geräten interagieren, beispielsweise um den Status "verfügbar" / "abwesend" in Chat-Anwendungen zu melden.
local-fonts
Experimentell-
Steuert, ob das aktuelle Dokument über die Methode
Window.queryLocalFonts()
Daten zu den auf dem Benutzergerät lokal installierten Schriftarten sammeln darf (siehe auch Local Font Access API). magnetometer
Experimentell-
Steuert, ob das aktuelle Dokument Informationen über die Orientierung des Geräts über die
Magnetometer
-Schnittstelle sammeln darf. microphone
Experimentell-
Steuert, ob das aktuelle Dokument Audio-Eingabegeräte nutzen darf. Wenn diese Policy deaktiviert ist, lehnt das von
Promise
zurückgegebeneMediaDevices.getUserMedia()
mit einemNotAllowedError
-DOMException
ab. midi
Experimentell-
Steuert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das von
Promise
zurückgegebeneNavigator.requestMIDIAccess()
mit einemSecurityError
-DOMException
ab. otp-credentials
Experimentell-
Steuert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalkennwort (OTP) von einer speziell formatierten SMS-Nachricht anzufordern, die vom Server der App gesendet wird, z. B. über
navigator.credentials.get({otp: ..., ...})
. payment
Experimentell-
Steuert, ob das aktuelle Dokument die Payment Request API verwenden darf. Wenn diese Policy aktiviert ist, löst der
PaymentRequest()
-Konstruktor eineSecurityError
-DOMException
aus. picture-in-picture
Experimentell-
Steuert, ob das aktuelle Dokument ein Video in einem Picture-in-Picture-Modus über die entsprechende API abspielen darf.
publickey-credentials-create
Experimentell-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um neue asymmetrische Schlüssel-Anmeldedaten zu erstellen, z. B. über
navigator.credentials.create({publicKey: ..., ...})
. publickey-credentials-get
Experimentell-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um bereits gespeicherte öffentliche Schlüssel-Anmeldedaten abzurufen, z. B. über
navigator.credentials.get({publicKey: ..., ...})
. screen-wake-lock
Experimentell-
Steuert, ob das aktuelle Dokument die Screen Wake Lock API verwenden darf, um anzuzeigen, dass das Gerät den Bildschirm nicht ausschalten oder abdunkeln sollte.
serial
Experimentell-
Steuert, 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-
Steuert, ob das aktuelle Dokument die Audio Output Devices API verwenden darf, um Lautsprecher aufzulisten und auszuwählen.
storage-access
Experimentell-
Steuert, 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 zu beantragen. usb
Experimentell-
Steuert, ob das aktuelle Dokument die WebUSB API verwenden darf.
-
Steuert, ob das aktuelle Dokument
Navigator.share()
der Web Share API verwenden darf, um Text, Links, Bilder und andere Inhalte an beliebige vom Benutzer gewählte Ziele, z. B. mobile Apps, zu teilen. window-management
Experimentell-
Steuert, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Bildschirmen zu verwalten.
xr-spatial-tracking
Experimentell-
Steuert, 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 den Zugriff auf die Geolocation zu erlauben, würden Sie dies tun:
Permissions-Policy: geolocation=*
Oder um den Zugriff auf einen Teilbereich der Ursprünge zu erlauben, würden Sie dies tun:
Permissions-Policy: geolocation=(self "https://a.example.com" "https://b.example.com")
Mehrere Funktionen können gleichzeitig gesteuert werden, indem Sie den Header mit einer durch Kommas getrennten Liste von Richtlinien senden oder indem Sie für jede Richtlinie einen separaten Header senden.
Zum Beispiel sind die folgenden äquivalent:
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 der übergeordneten Seite enthalten sein. Aufgrund dieses Vererbungsverhaltens ist es eine gute Idee, die breiteste akzeptable Unterstützung für eine Funktion im HTTP-Header anzugeben und dann den benötigten Teilbereich der Unterstützung in jedem <iframe>
anzugeben.
Um allen Ursprüngen den Zugriff auf die Geolocation zu erlauben, 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>
Dies ist wichtig: Standardmäßig wird, wenn ein <iframe>
zu einem anderen Ursprung navigiert, die Richtlinie nicht auf den Ursprung angewandt, 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 angewandt, zu dem das <iframe>
navigiert.
Mehrere Funktionen können gleichzeitig gesteuert 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 wert, dem src
-Wert besondere Erwähnung zu schenken. 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 gleichen Ursprung wie die URL in seinem src-Attribut stammt. Dieser Wert ist der Standardwert für die Allowlist für in allow
aufgeführte Funktionen, sodass die folgenden äquivalent sind:
<iframe src="https://example.com" allow="geolocation 'src'">
<iframe src="https://example.com" allow="geolocation"></iframe
></iframe>
Zugang zu leistungsstarken Funktionen verweigern
SecureCorp Inc. möchte die Mikrofon- (zum Beispiel MediaDevices.getUserMedia()
) und Geolocation
-APIs in seiner Anwendung deaktivieren. Dies kann es mit dem folgenden Antwort-Header tun:
Permissions-Policy: microphone=(), geolocation=()
Durch die Angabe von ()
für die Ursprungs-Liste werden die angegebenen Funktionen für alle Browsing-Kontexte (einschließlich aller <iframe>
s) unabhängig von ihrem Ursprung deaktiviert.
HTTP-Header- und <iframe>
-Richtlinien kombinieren
Angenommen, wir möchten die Nutzung von Geolocation auf unserem eigenen Ursprung sowie in eingebetteten Inhalten von unserem vertrauenswürdigen Werbenetzwerk ermöglichen. 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 würde, 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 |