Permissions-Policy
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.
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
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>
-Attributeallow
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ürhttps://your-site.example.com
angesehen werden. Das Äquivalent für<iframe>
-Attributeallow
istself
.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>
-Attributallow
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ä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 steuert, wenn sie nicht explizit in einer Richtlinie aufgeführt sind. Diese sind auf den individuellen Richtlinienreferenzseiten angegeben. Für<iframe>
-Attributeallow
ist das Standardverhalten immersrc
.
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
("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-
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 vonHTMLMediaElement.play()
zurückgegebenePromise
mit einemNotAllowedError
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 vonNavigator.bluetooth
zurückgegeben wird, entwederfalse
zurückgeben oder das zurückgegebenePromise
mit einemSecurityError
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 einemSec-Browsing-Topics
-Header zu senden, mit einemNotAllowedError
DOMException
fehl. camera
Experimentell-
Bestimmt, ob das aktuelle Dokument Videoeingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das
Promise
, das vongetUserMedia()
zurückgegeben wird, mit einemNotAllowedError
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 vongetDisplayMedia()
zurückgegeben wird, mit einemNotAllowedError
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 eineSecurityError
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 vonNavigator.requestMediaKeySystemAccess()
zurückgegeben wird, mit einemSecurityError
DOMException
zurückgewiesen. fullscreen
Experimentell-
Bestimmt, ob das aktuelle Dokument
Element.requestFullscreen()
verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das zurückgegebenePromise
mit einemTypeError
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 einemSecurityError
DOMException
, und die Ereignissegamepadconnected
undgamepaddisconnected
werden nicht ausgelöst. geolocation
Experimentell-
Bestimmt, ob das aktuelle Dokument die
Geolocation
-Schnittstelle verwenden darf. Wenn diese Richtlinie deaktiviert ist, führen Aufrufe vongetCurrentPosition()
undwatchPosition()
dazu, dass die Rückruffunktionen dieser Methoden mit einemGeolocationPositionError
-CodePERMISSION_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 eineridentity
-Option. Wo diese Richtlinie die Nutzung der API verbietet, wird dasPromise
, das vom Aufrufget()
zurückgegeben wird, mit einemNotAllowedError
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 vonMediaDevices.getUserMedia()
zurückgegeben wird, mit einemNotAllowedError
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 vonNavigator.requestMIDIAccess()
zurückgegeben wird, mit einemSecurityError
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 einenSecurityError
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.
-
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:
Permissions-Policy: geolocation=*
Oder um den Zugriff auf eine Teilmenge von Ursprüngen 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 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:
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:
<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, 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.
<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:
<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:
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:
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:
<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:
<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