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 Permissions-Policy
Antwort-Header bietet einen Mechanismus, um die Nutzung von Browserfunktionen in einem Dokument oder innerhalb eines <iframe>
Elements im Dokument zu erlauben oder zu verweigern.
Für weitere Informationen siehe den Hauptartikel Permissions Policy.
Header-Typ | Antwort-Header |
---|---|
Verbotener Anforderungs-Header | ja |
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>
-
Die Permissions Policy-Direktive, auf die die
allowlist
angewendet werden soll. Siehe Direktiven weiter 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 umfasst, getrennt durch Leerzeichen:
*
(Wildcard)-
Die Funktion wird in diesem Dokument und allen geschachtelten Browsing-Kontexten (
<iframe>
s) unabhängig von ihrem Ursprung erlaubt. ()
(leere Allowlist)-
Die Funktion ist im Top-Level und in geschachtelten Browsing-Kontexten deaktiviert. Das Äquivalent für
<iframe>
allow
-Attribute ist'none'
. self
-
Die Funktion wird in diesem Dokument erlaubt, und in allen geschachtelten Browsing-Kontexten (
<iframe>
s) nur im selben Ursprung. Die Funktion ist in Dokumenten mit fremdem Ursprung in geschachtelten Browsing-Kontexten nicht erlaubt.self
kann als Abkürzung fürhttps://your-site.example.com
betrachtet werden. Das Äquivalent für<iframe>
allow
-Attribute istself
. src
-
Die Funktion wird in diesem
<iframe>
erlaubt, solange das Dokument, das darin geladen wird, vom selben Ursprung wie die URL in seinem src Attribut stammt. Dieser Wert wird nur im<iframe>
allow
-Attribut verwendet und ist der Standardallowlist
-Wert in<iframe>
s. "<origin>"
-
Die Funktion ist für bestimmte Ursprünge (zum Beispiel
"https://a.example.com"
) erlaubt. 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 alleine 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 eines der folgenden sein muss:
*
,self
odernone
für denPermissions-Policy
HTTP-Header und das Standardverhalten steuert, wenn sie nicht explizit in einer Policy aufgelistet sind. Diese werden auf den einzelnen Direktiven-Referenzseiten spezifiziert. Für<iframe>
allow
-Attribute ist das Standardverhalten immersrc
.
Wo unterstützt, können Sie Wildcards in Permissions Policy-Ursprüngen einschließen. Dies bedeutet, dass Sie anstatt mehrere verschiedene Subdomains explizit in einer Allowlist anzugeben, alle in einem einzigen Ursprung mit einer Wildcard spezifizieren 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"
passt nicht zu "https://example.com"
.
Direktiven
accelerometer
Experimentell-
Steuert, ob das aktuelle Dokument Informationen über die Beschleunigung des Geräts durch die
Accelerometer
Schnittstelle sammeln darf. ambient-light-sensor
Experimentell-
Steuert, ob das aktuelle Dokument Informationen über die Lichtmenge in der Umgebung des Geräts durch 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 automatisch abspielen darf, die über die
HTMLMediaElement
-Schnittstelle angefordert werden. Wenn diese Policy deaktiviert ist und keine Benutzeraktionen vorliegen, wird das versautePromise
vonHTMLMediaElement.play()
mit einemNotAllowedError
DOMException
zurückgewiesen. 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, werden die Methoden des
Bluetooth
-Objekts, das vonNavigator.bluetooth
zurückgegeben wird, entwederfalse
zurückgeben oder das zurückgegebenePromise
mit einemSecurityError
DOMException
zurückweisen. browsing-topics
Experimentell Nicht standardisiert-
Steuert den Zugriff auf die Topics API. Wo eine Policy speziell die Nutzung der Topics API verbietet, werden alle Versuche, die
Document.browsingTopics()
-Methode aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics
Header zu senden, mit einemNotAllowedError
DOMException
fehlschlagen. camera
Experimentell-
Steuert, ob das aktuelle Dokument Video-Eingabegeräte verwenden darf. Wenn diese Policy deaktiviert ist, wird das zurückgegebene
Promise
vongetUserMedia()
mit einemNotAllowedError
DOMException
abgelehnt. 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.
deferred-fetch
Experimentell-
Steuert die Zuweisung des
fetchLater()
Quota des Top-Level-Ursprungs. deferred-fetch-minimal
Experimentell-
Steuert die Zuweisung des gemeinsamen Cross-Origin-Subframe-Quota für
fetchLater()
. display-capture
Experimentell-
Steuert, ob das aktuelle Dokument die Methode
getDisplayMedia()
verwenden darf, um Bildschirminhalte zu erfassen. Wenn diese Policy deaktiviert ist, wird das Promise, das vongetDisplayMedia()
zurückgegeben wird, mit einemNotAllowedError
DOMException
abgelehnt, wenn keine Erlaubnis zum Erfassen der Bildschirmdarstellung erteilt wird. 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 einenSecurityError
DOMException
aus. encrypted-media
Experimentell-
Steuert, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Policy deaktiviert ist, wird das zurückgegebene
Promise
vonNavigator.requestMediaKeySystemAccess()
mit einemSecurityError
DOMException
zurückgewiesen. fullscreen
Experimentell-
Steuert, ob das aktuelle Dokument
Element.requestFullscreen()
verwenden darf. Wenn diese Policy deaktiviert ist, wird das zurückgegebenePromise
mit einemTypeError
abgelehnt. gamepad
Experimentell-
Steuert, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Policy deaktiviert ist, führen Aufrufe von
Navigator.getGamepads()
zu einemSecurityError
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 Rückrufe dieser Funktionen mit einemGeolocationPositionError
Code vonPERMISSION_DENIED
aufgerufen werden. gyroscope
Experimentell-
Steuert, ob das aktuelle Dokument Informationen über die Orientierung des Geräts durch die
Gyroscope
-Schnittstelle sammeln darf. hid
Experimentell-
Steuert, ob das aktuelle Dokument die WebHID API verwenden darf, um mit seltenen oder exotischen Mensch-Maschine-Schnittstellengeräten wie alternativen Tastaturen oder Gamepads zu kommunizieren.
identity-credentials-get
Experimentell-
Steuert, ob das aktuelle Dokument die Federated Credential Management API (FedCM) und speziell die Methode
navigator.credentials.get()
mit eineridentity
-Option verwenden darf. Wo diese Policy die Nutzung der API verbietet, wird das zurückgegebenePromise
vomget()
-Aufruf mit einemNotAllowedError
DOMException
abgelehnt. idle-detection
Experimentell-
Steuert, ob das aktuelle Dokument die Idle Detection API verwenden darf, um zu erkennen, wann Benutzer mit ihren Geräten interagieren, zum Beispiel um den Status "verfügbar"/"abwesend" in Chat-Anwendungen zu melden.
local-fonts
Experimentell-
Steuert, 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-
Steuert, ob das aktuelle Dokument Informationen über die Orientierung des Geräts durch die
Magnetometer
-Schnittstelle sammeln darf. microphone
Experimentell-
Steuert, ob das aktuelle Dokument Audio-Eingabegeräte verwenden darf. Wenn diese Policy deaktiviert ist, wird das zurückgegebene
Promise
vonMediaDevices.getUserMedia()
mit einemNotAllowedError
DOMException
abgelehnt. midi
Experimentell-
Steuert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Policy deaktiviert ist, wird das zurückgegebene
Promise
vonNavigator.requestMIDIAccess()
mit einemSecurityError
DOMException
abgelehnt. otp-credentials
Experimentell-
Steuert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmal-Passwort (OTP) aus 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, wird der Konstruktor
PaymentRequest()
einenSecurityError
DOMException
auslösen. picture-in-picture
Experimentell-
Steuert, ob das aktuelle Dokument ein Video im Bild-in-Bild-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üsselanmeldeinformationen 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üsselanmeldedaten 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 dimmen soll.
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 unpartitionierte Cookies anzufordern. summarizer
Experimentell-
Steuert den Zugriff auf die Summarizer API.
usb
Experimentell-
Steuert, ob das aktuelle Dokument die WebUSB API verwenden darf.
-
Steuert, ob das aktuelle Dokument die
Navigator.share()
der Web Share API verwenden darf, um Texte, Links, Bilder und andere Inhalte an beliebige vom Benutzer ausgewä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 Geolokation zu erlauben, würden Sie Folgendes tun:
Permissions-Policy: geolocation=*
Um den Zugriff auf eine Teilmenge von Ursprüngen zu erlauben, würden Sie Folgendes tun:
Permissions-Policy: geolocation=(self "https://a.example.com" "https://b.example.com")
Mehrere Funktionen können gleichzeitig kontrolliert werden, indem entweder der Header mit einer durch Kommas getrennten Liste von Policies gesendet wird oder indem ein separater Header für jede Policy gesendet wird.
Zum Beispiel sind die folgenden 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>
eine Funktion aktiviert hat, muss auch sein erlaubter Ursprung in der Allowlist der übergeordneten Seite stehen. Aufgrund dieses Vererbungverhaltens ist es eine gute Idee, die breiteste akzeptable Unterstützung für eine Funktion im HTTP-Header anzugeben und dann das benötigte Unterstützungsspektrum in jedem <iframe>
anzugeben.
Um allen Ursprüngen den Zugriff auf Geolokation zu erlauben, würden Sie Folgendes tun:
<iframe src="https://example.com" allow="geolocation *"></iframe>
Um eine Policy auf den aktuellen Ursprung und andere anzuwenden, würden Sie Folgendes 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 wechselt, wird die Policy nicht auf den Ursprung angewendet, zu dem das <iframe>
navigiert. Indem man den Ursprung, zu dem das <iframe>
navigiert, im allow
-Attribut angibt, 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 kontrolliert werden, indem eine durch Semikolon getrennte Liste von Policy-Direktiven im allow
-Attribut enthalten ist.
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>
Es lohnt sich, den src
-Wert speziell zu erwähnen. 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 Standard allowlist
-Wert für Funktionen, die im allow
aufgelistet sind, daher sind die folgenden gleichwertig:
<iframe src="https://example.com" allow="geolocation 'src'">
<iframe src="https://example.com" allow="geolocation"></iframe
></iframe>
Den Zugriff auf leistungsfähige Funktionen verweigern
SecureCorp Inc. möchte die Mikrofon- (zum Beispiel MediaDevices.getUserMedia()
) und Geolocation
APIs in ihrer Anwendung deaktivieren. Das kann mit dem folgenden Antwort-Header getan werden:
Permissions-Policy: microphone=(), geolocation=()
Indem ()
für die Ursprungsliste angegeben wird, werden die bestimmten Funktionen für alle Browsing-Kontexte deaktiviert (dies schließt alle <iframe>
s ein), unabhängig von ihrem Ursprung.
Kombination von HTTP-Header und <iframe>
-Policies
Zum Beispiel, wenn wir die Nutzung der Geolocation auf unserem eigenen Ursprung zulassen und in eingebetteten Inhalten von unserem vertrauenswürdigen Werbenetzwerk, könnten wir 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 letztendlich in <iframe>
geladen wird, hätte dieser keinen Zugriff auf Geolocation:
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>
Spezifikationen
Specification |
---|
Permissions Policy # permissions-policy-http-header-field |