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
Antwort-Header bietet einen Mechanismus, um die Nutzung von Browser-Funktionen in einem Dokument oder innerhalb eines beliebigen <iframe>
Elements im Dokument zu erlauben oder zu verweigern.
Für weitere Informationen siehe den Hauptartikel zur Permissions Policy.
Headertyp | Antwort-Header |
---|---|
Verboter Anfrage-Header | ja |
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>
-
Die Permissions Policy-Direktive, auf die die
allowlist
angewendet werden soll. Siehe Directives 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 enthält, durch Leerzeichen getrennt:
*
(Wildcard)-
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 obersten und verschachtelten Browsing-Kontexten deaktiviert. Das Äquivalent für
<iframe>
allow
Attribute ist'none'
. self
-
Die Funktion wird in diesem Dokument und in allen verschachtelten Browsing-Kontexten (
<iframe>
s) desselben Ursprungs nur erlaubt. Die Funktion ist in Dokumenten mit unterschiedlichem Ursprung in verschachtelten 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 in ihm 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 Standardallowlist
Wert in<iframe>
s. "<origin>"
-
Die Funktion ist für bestimmte Ursprünge erlaubt (z.B.
"https://a.example.com"
). Ursprünge sollten durch Leerzeichen getrennt werden. Beachten Sie, dass Ursprünge in<iframe>
erlauben Attributen nicht in Anführungszeichen gesetzt sind.
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 eines der Werte
*
,self
odernone
für denPermissions-Policy
HTTP-Header ist und das Standardverhalten regelt, wenn sie nicht explizit in einer Richtlinie aufgelistet sind. Diese sind auf den individuellen Direktivreferenz-Seiten angegeben. Für<iframe>
allow
Attribute ist das Standardverhalten immersrc
.
Wo unterstützt, können Sie Wildcards in Ursprüngen der Permissions Policy einfügen. Das bedeutet, dass Sie anstatt mehrere verschiedene Subdomänen ausdrücklich in einer Allowlist anzugeben, sie alle in einem einzigen Ursprung mit einem Wildcard angeben können.
Anstelle 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 das
Accelerometer
Interface sammeln darf. ambient-light-sensor
Experimentell-
Bestimmt, ob das aktuelle Dokument Informationen über die Lichtmenge in der Umgebung des Geräts über das
AmbientLightSensor
Interface sammeln darf. attribution-reporting
Experimentell-
Bestimmt, ob das aktuelle Dokument die Nutzung der Attribution Reporting API erlaubt ist.
autoplay
Experimentell-
Bestimmt, ob das aktuelle Dokument automatisch Medieninhalte abspielen darf, die über das
HTMLMediaElement
Interface angefordert werden. Wenn diese Richtlinie deaktiviert ist und keine Benutzerinteraktionen erfolgt sind, wird das vonHTMLMediaElement.play()
zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. Dasautoplay
Attribut auf<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
ablehnen. browsing-topics
Experimentell Nicht standardisiert-
Bestimmt den Zugriff auf die Topics API. Wenn eine Richtlinie die Nutzung der Topics API speziell verbietet, werden alle Versuche, die
Document.browsingTopics()
Methode zu rufen oder eine Anfrage mit einemSec-Browsing-Topics
Header zu senden, mit einemNotAllowedError
DOMException
fehlschlagen. camera
Experimentell-
Bestimmt, ob das aktuelle Dokument Videogeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
getUserMedia()
zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. compute-pressure
Experimentell-
Bestimmt den Zugriff auf die Compute Pressure API.
cross-origin-isolated
Experimentell-
Bestimmt, ob das aktuelle Dokument als cross-origin isoliert behandelt werden kann.
deferred-fetch
Experimentell-
Bestimmt die Zuteilung des
fetchLater()
Kontingents des obersten Ursprungs. deferred-fetch-minimal
Experimentell-
Bestimmt die Zuteilung des gemeinsamen cross-origin Subframe
fetchLater()
Kontingents. display-capture
Experimentell-
Bestimmt, ob das aktuelle Dokument die
getDisplayMedia()
Methode verwenden darf, um Bildschirminhalte zu erfassen. Wenn diese Richtlinie deaktiviert ist, wird das vongetDisplayMedia()
zurückgegebene Promise mit einemNotAllowedError
DOMException
abgelehnt, wenn keine Erlaubnis zur Anzeigeerfassung erteilt wird. encrypted-media
Experimentell-
Bestimmt, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMediaKeySystemAccess()
zurückgegebenePromise
mit einemSecurityError
DOMException
abgelehnt. fullscreen
Experimentell-
Bestimmt, ob das aktuelle Dokument
Element.requestFullscreen()
verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das zurückgegebenePromise
mit einemTypeError
abgelehnt. gamepad
Experimentell-
Bestimmt, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Richtlinie deaktiviert ist, werden Aufrufe von
Navigator.getGamepads()
einenSecurityError
DOMException
auslösen, und diegamepadconnected
undgamepaddisconnected
Ereignisse werden nicht ausgelöst. geolocation
Experimentell-
Bestimmt, ob das aktuelle Dokument die
Geolocation
Schnittstelle verwenden darf. Wenn diese Richtlinie deaktiviert ist, werden Aufrufe vongetCurrentPosition()
undwatchPosition()
dazu führen, dass die Rückruf-Funktionen dieser Funktionen mit einemGeolocationPositionError
Code vonPERMISSION_DENIED
aufgerufen werden. gyroscope
Experimentell-
Bestimmt, ob das aktuelle Dokument Informationen über die Ausrichtung 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 ungewöhnlichen oder exotischen menschlichen Schnittstellengeräten wie alternativen Tastaturen oder Gamepads herzustellen.
identity-credentials-get
Experimentell-
Bestimmt, ob das aktuelle Dokument die Federated Credential Management API (FedCM) und speziell die
navigator.credentials.get()
Methode mit eineridentity
Option verwenden darf. Wenn diese Richtlinie die Nutzung der API verbietet, wird das von demget()
Aufruf zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. idle-detection
Experimentell-
Bestimmt, ob das aktuelle Dokument die Idle Detection API verwenden darf, um zu erkennen, wenn Benutzer mit ihren Geräten interagieren, beispielsweise um in Chat-Anwendungen den Status "verfügbar"/"abwesend" zu melden.
language-detector
Experimentell-
Bestimmt den Zugriff auf die Sprachenerkennungsfunktionalität der Translator and Language Detector APIs.
local-fonts
Experimentell-
Bestimmt, ob das aktuelle Dokument Daten zu den lokal installierten Schriften des Benutzers über die
Window.queryLocalFonts()
Methode sammeln darf (siehe auch die Local Font Access API). magnetometer
Experimentell-
Bestimmt, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über die
Magnetometer
Schnittstelle sammeln darf. microphone
Experimentell-
Bestimmt, ob das aktuelle Dokument Audio-Eingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
MediaDevices.getUserMedia()
zurückgegebenePromise
mit einemNotAllowedError
DOMException
abgelehnt. midi
Experimentell-
Bestimmt, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMIDIAccess()
zurückgegebenePromise
mit einemSecurityError
DOMException
abgelehnt. otp-credentials
Experimentell-
Bestimmt, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalpasswort (OTP) aus einer speziell formatierten SMS zu beantragen, die vom Server der App gesendet wird, 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 sollte.
serial
Experimentell-
Bestimmt, ob das aktuelle Dokument die Web Serial API verwenden darf, um mit seriellen Geräten zu kommunizieren, die entweder direkt über einen seriellen Anschluss angeschlossen sind 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 in einem Drittanbieter-Kontext geladenes Dokument (d.h. eingebettet in einem
<iframe>
) die Verwendung der Storage Access API beantragen darf, um Zugriff auf nicht partitionierte Cookies zu erhalten. translator
Experimentell-
Bestimmt den Zugriff auf die Übersetzungsfunktionalität der Translator and Language Detector APIs.
summarizer
Experimentell-
Bestimmt den Zugriff auf die Summarizer API.
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 zu beliebigen Zielen der Wahl des Benutzers zu teilen, z. B. mobilen Apps. window-management
Experimentell-
Bestimmt, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Displays 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 die Geolokalisierung zu erlauben, würden Sie dies tun:
Permissions-Policy: geolocation=*
Oder um den Zugriff auf eine Teilmenge von Ursprüngen zu beschränken, würden Sie dies tun:
Permissions-Policy: geolocation=(self "https://a.example.com" "https://b.example.com")
Mehrere Funktionen können gleichzeitig durch Senden des Headers mit einer durch Kommas getrennten Liste von Richtlinien oder durch Senden eines separaten Headers für jede Richtlinie gesteuert werden.
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
Für ein <iframe>
, das eine Funktion aktiviert haben soll, muss der erlaubte Ursprung auch in der Allowlist der übergeordneten Seite enthalten sein. Aufgrund dieses Vererbungsmusters ist es eine gute Idee, die größtmögliche Unterstützung für eine Funktion im HTTP-Header zu spezifizieren und dann den benötigten Unterstützungsbereich in jedem <iframe>
anzugeben.
Um allen Ursprüngen Zugriff auf die 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 navigiert, wird die Richtlinie nicht auf den Ursprung angewendet, zu dem das <iframe>
navigiert. Durch das Auflisten des Ursprungs, zu dem das <iframe>
navigiert, im allow
Attribut, wird die Permissions Policy, die ursprünglich auf das <iframe>
angewendet wurde, auf den Ursprung angewendet, zu dem das <iframe>
navigiert.
Mehrere Funktionen können gleichzeitig gesteuert werden, indem eine durch Semikolon getrennte Liste von Richtliniendirektiven 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, dem src
Wert besondere Aufmerksamkeit zu widmen. 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 selben Ursprung wie die URL in seinem src Attribut stammt. Dieser Wert ist der Standard allowlist
Wert für Funktionen, die in allow
aufgelistet sind, sodass die folgenden äquivalent sind:
<iframe src="https://example.com" allow="geolocation 'src'">
<iframe src="https://example.com" allow="geolocation"></iframe
></iframe>
Den Zugriff auf leistungsstarke Funktionen verweigern
SecureCorp Inc. möchte die Verwendung der Mikrofon (z.B. MediaDevices.getUserMedia()
) und der Geolocation
APIs in ihrer Anwendung deaktivieren. Sie kann dies mit dem folgenden Antwort-Header tun:
Permissions-Policy: microphone=(), geolocation=()
Durch die Angabe von ()
für die Ursprungsmittel werden die angegebenen Funktionen für alle Browsing-Kontexte (einschließlich aller <iframe>
s) deaktiviert, unabhängig von ihrem Ursprung.
Kombination aus HTTP-Header und <iframe>
-Richtlinien
Angenommen, wir möchten die Nutzung der Geolokalisierung auf unserem eigenen Ursprung und in eingebetteten Inhalten, die von unserem vertrauenswürdigen Werbenetzwerk stammen, aktivieren. Wir könnten die seitenweite Permissions Policy wie folgt einrichten:
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)
In unseren Ad-<iframe>
s könnten wir den Zugriff auf den Ursprung https://trusted-ad-network.com
wie folgt festlegen:
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>
Wenn ein anderer Ursprung in <iframe>
geladen würde, hätte er keinen Zugriff auf die Geolokalisierung:
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>
Spezifikationen
Specification |
---|
Permissions Policy # permissions-policy-http-header-field |