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
Response-Header bietet einen Mechanismus, um die Nutzung 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 | Response-Header |
---|---|
Verbotener Request-Header | ja |
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>
-
Die Permissions Policy-Direktive, auf die die
Allowlist
angewendet werden soll. Siehe Direktiven unten für eine Liste der zulässigen Direktivnamen. <allowlist>
-
Eine Allowlist ist eine Liste von Ursprüngen, die einen oder mehrere der folgenden Werte in Klammern enthält, getrennt durch Leerzeichen:
*
(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) nur im gleichen Ursprung erlaubt. Die Funktion ist in Cross-Origin-Dokumenten in verschachtelten Browsing-Kontexten nicht erlaubt.self
kann als Kurzform 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 darin geladene Dokument denselben Ursprung hat wie die URL im src-Attribut. Dieser Wert wird nur im<iframe>
-allow
-Attribut 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>
-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
*
,self
odernone
für denPermissions-Policy
-HTTP-Header ist und das Standardverhalten regelt, wenn sie nicht explizit in einer Richtlinie 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. Das bedeutet, dass Sie anstelle der expliziten Angabe mehrerer unterschiedlicher Subdomains alle in einem einzelnen Ursprung mit einem Wildcard angeben können.
Statt
("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-
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 verwenden darf.
autoplay
Experimentell-
Steuert, ob das aktuelle Dokument Medien, die über die
HTMLMediaElement
-Schnittstelle angefordert wurden, automatisch abspielen darf. Wenn diese Richtlinie deaktiviert ist und es keine Benutzerinteraktionen gab, wird derPromise
, der vonHTMLMediaElement.play()
zurückgegeben wird, mit einemNotAllowedError
-DOMException
abgelehnt. Das Autoplay-Attribut auf<audio>
- und<video>
-Elementen wird ignoriert. bluetooth
Experimentell-
Steuert, ob die Verwendung 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 den zurückgegebenenPromise
mit einemSecurityError
-DOMException
ab. browsing-topics
Experimentell Nicht standardisiert-
Steuert den Zugriff auf die Themen-API. Wenn eine Richtlinie die Verwendung der Themen-API speziell verbietet, wird jeder Versuch, die Methode
Document.browsingTopics()
aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics
-Header zu senden, mit einemNotAllowedError
-DOMException
fehlschlagen. camera
Experimentell-
Steuert, ob das aktuelle Dokument Videogeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird der von
getUserMedia()
zurückgegebenePromise
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 isoliert behandelt werden kann.
display-capture
Experimentell-
Steuert, ob das aktuelle Dokument die Methode
getDisplayMedia()
verwenden darf, um Bildschirm-Inhalte zu erfassen. Wenn diese Richtlinie deaktiviert ist, wird das vongetDisplayMedia()
zurückgegebene Promise mit einemNotAllowedError
-DOMException
abgelehnt, wenn keine Genehmigung für die Erfassung der Display-Inhalte erteilt wird. document-domain
Experimentell-
Steuert, ob das aktuelle Dokument
document.domain
setzen darf. Wenn diese Richtlinie deaktiviert ist, wird der Versuch,document.domain
zu setzen, fehlschlagen und eineSecurityError
-DOMException
wird ausgelöst. encrypted-media
Experimentell-
Steuert, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird der von
Navigator.requestMediaKeySystemAccess()
zurückgegebenePromise
mit einemSecurityError
-DOMException
abgelehnt. fullscreen
Experimentell-
Steuert, ob das aktuelle Dokument
Element.requestFullscreen()
verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird der zurückgegebenePromise
mit einemTypeError
abgelehnt. gamepad
Experimentell-
Steuert, 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 Ereignissegamepadconnected
undgamepaddisconnected
werden nicht ausgelöst. geolocation
Experimentell-
Steuert, ob das aktuelle Dokument die
Geolocation
-Schnittstelle verwenden darf. Wenn diese Richtlinie deaktiviert ist, führen Aufrufe vongetCurrentPosition()
undwatchPosition()
dazu, dass die Rückruf-Funktionen 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 Benutzerschnittstellengeräten wie alternativen Tastaturen oder Gamepads herzustellen.
identity-credentials-get
Experimentell-
Steuert, 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 Verwendung der API verbietet, wird der von demget()
-Aufruf zurückgegebenePromise
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, um beispielsweise 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
Window.queryLocalFonts()
-Methode sammeln darf (siehe auch die 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 Audioeingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird der von
MediaDevices.getUserMedia()
zurückgegebenePromise
mit einemNotAllowedError
-DOMException
abgelehnt. midi
Experimentell-
Steuert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird der von
Navigator.requestMIDIAccess()
zurückgegebenePromise
mit einemSecurityError
-DOMException
abgelehnt. otp-credentials
Experimentell-
Steuert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalpasswort (OTP) aus einer speziell formatierten SMS-Nachricht anzufordern, die vom Server der App gesendet wurde, d.h. über
navigator.credentials.get({otp: ..., ...})
. payment
Experimentell-
Steuert, 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-
Steuert, ob das aktuelle Dokument ein Video im 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üsselanmeldeinformationen zu erstellen, d.h. ü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üsselanmeldeinformationen abzurufen, d.h. ü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 Drittanbieterkontext geladenes Dokument (d.h. eingebettet in ein
<iframe>
) die Storage Access API verwenden darf, um Zugriff auf nicht partitionierte Cookies anzufordern. 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 Ziele zu teilen, die der Benutzer wählt, z.B. mobile Apps. window-management
Experimentell-
Steuert, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Anzeigen 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 Geolocation zu ermöglichen, würden Sie dies tun:
Permissions-Policy: geolocation=*
Oder um den Zugriff auf eine Teilmenge von Ursprüngen zu ermöglichen, 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 Kommas 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 aktivierte Funktion hat, muss der erlaubte Ursprung auch in der Allowlist der übergeordneten Seite enthalten sein. Aufgrund dieses Vererbungverhaltens ist es eine gute Idee, den weitest akzeptablen Support für eine Funktion im HTTP-Header anzugeben und dann das benötigte Subset des Supports in jedem <iframe>
zu spezifizieren.
Um allen Ursprüngen den Zugriff auf Geolocation zu ermöglichen, 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>
Wichtig ist: 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 in der allow
-Eigenschaft auflisten, 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 gesteuert werden, indem eine Liste von Richtliniendirektiven durch Semikolons getrennt innerhalb des allow
-Attributs enthalten ist.
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>
Es ist einen besonderen Erwähnung wert, src
zu geben. 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 im src-Attribut stammt. Dieser Wert ist der Standard- Allowlist
-Wert für Funktionen, die in allow
aufgeführt sind, daher sind die folgenden gleichwertig:
<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 Microphone (zum Beispiel MediaDevices.getUserMedia()
) und Geolocation
-APIs in seiner Anwendung deaktivieren. Sie können dies mit dem folgenden Response-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 alle <iframe>
s), unabhängig von deren Ursprung, deaktiviert.
Kombination von HTTP-Header und <iframe>
-Richtlinien
Angenommen, wir wollten die Nutzung von Geolocation auf unserem eigenen Ursprung und in eingebetteten Inhalten, die von unserem vertrauenswürdigen Anzeigenetzwerk stammen, aktivieren. Wir könnten die seitenweite Permissions Policy folgendermaßen einrichten:
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)
In unseren Anzeigen-<iframe>
s könnten wir den Zugriff auf den Ursprung https://trusted-ad-network.com
wie folgt setzen:
<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 Geolocation:
<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