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 Verwendung von Browserfunktionen in einem Dokument oder innerhalb von <iframe>-Elementen im Dokument zu erlauben oder zu verbieten.
Weitere Informationen finden Sie im Hauptartikel zur Permissions Policy.
| Header-Typ | Antwort-Header |
|---|
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>-
Die Permissions-Policy-Direktive, auf die die
allowlistangewendet wird. Siehe Direktiven unten für eine Liste der erlaubten Direktivennamen. <allowlist>-
Eine Allowlist ist eine Liste von Ursprungsadressen, die einen oder mehrere der folgenden in Klammern enthaltenen Werte enthält, getrennt durch Leerzeichen:
*(Platzhalter)-
Die Funktion wird in diesem Dokument und allen geschachtelten Browsing-Kontexten (
<iframe>s) unabhängig von ihrem Ursprung erlaubt. ()(leere Allowlist)-
Die Funktion ist in obersten und geschachtelten Browsing-Kontexten deaktiviert. Das Äquivalent für
<iframe>-allow-Attribute ist'none'. self-
Die Funktion wird in diesem Dokument und in allen geschachtelten Browsing-Kontexten (
<iframe>s) nur im gleichen Ursprung erlaubt. Die Funktion ist in Cross-Origin-Dokumenten in geschachtelten Browsing-Kontexten nicht erlaubt.selfkann als Abkürzung fürhttps://your-site.example.combetrachtet werden. Das Äquivalent für<iframe>-allow-Attribute istself. src-
Die Funktion wird in diesem
<iframe>erlaubt, solange das darin geladene Dokument aus demselben Ursprung wie die URL im src-Attribut stammt. Dieser Wert wird nur im<iframe>-allow-Attribut verwendet und ist der Standard-allowlist-Wert in<iframe>s. "<origin>"-
Die Funktion ist für spezifische Ursprünge erlaubt (z. B.
"https://a.example.com"). Ursprünge sollten durch Leerzeichen getrennt werden. Beachten Sie, dass Ursprünge in<iframe>-allow-Attributen nicht in Anführungszeichen geschrieben werden.
Die Werte
*und()dürfen nur alleinstehend verwendet werden, währendselfundsrcin Kombination mit einem oder mehreren Ursprüngen verwendet werden können.Hinweis: Direktiven haben eine Standard-allowlist, die immer eines von
*,selfodernonefür denPermissions-Policy-HTTP-Header ist und das Standardverhalten bestimmt, wenn sie nicht explizit in einer Policy aufgeführt sind. Diese sind auf den individuellen Direktivreferenzseiten angegeben. Für<iframe>-allow-Attribute ist das Standardverhalten immersrc.
Wo unterstützt, können Sie Platzhalter in Permissions-Policy-Ursprüngen verwenden. Das bedeutet, dass anstatt explizit mehrere verschiedene Subdomains in einer Allowlist anzugeben, Sie alle in einem einzigen Ursprung mit einem Platzhalter 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" entspricht nicht "https://example.com".
Direktiven
accelerometerExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Beschleunigung des Geräts über die
Accelerometer-Schnittstelle sammeln darf. ambient-light-sensorExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Lichtmenge in der Umgebung des Geräts über die
AmbientLightSensor-Schnittstelle sammeln darf. aria-notifyExperimentell Nicht standardisiert-
Steuert, ob das aktuelle Dokument die
ariaNotify()-Methode verwenden darf, um Screenreader-Ankündigungen auszulösen. attribution-reportingExperimentell Veraltet-
Steuert, ob das aktuelle Dokument die Attribution Reporting API verwenden darf.
autoplayExperimentell-
Steuert, ob das aktuelle Dokument Medien, die über die
HTMLMediaElement-Schnittstelle angefordert werden, automatisch abspielen darf. Wenn diese Policy deaktiviert ist und keine Benutzeraktionen stattfanden, wird dasPromise, das vonHTMLMediaElement.play()zurückgegeben wird, mit einemNotAllowedError-DOMExceptionabgelehnt. Das Autoplay-Attribut von<audio>und<video>-Elementen wird ignoriert. bluetoothExperimentell-
Steuert, ob die Nutzung der Web Bluetooth API erlaubt ist. Wenn diese Policy deaktiviert ist, werden die Methoden des
Bluetooth-Objekts, das vonNavigator.bluetoothzurückgegeben wird, entwederfalsezurückgeben oder das zurückgegebenePromisemit einemSecurityError-DOMExceptionablehnen. browsing-topicsExperimentell Nicht standardisiert Veraltet-
Steuert den Zugriff auf die Topics API. Wenn eine Policy die Verwendung der Topics API explizit untersagt, werden alle Versuche, die
Document.browsingTopics()-Methode aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics-Header zu senden, mit einemNotAllowedError-DOMExceptionfehlschlagen. cameraExperimentell-
Steuert, ob das aktuelle Dokument Videogeräte verwenden darf. Das
Promise, das vongetUserMedia()zurückgegeben wird, lehnt ab mit einemNotAllowedError-DOMExceptionab, wenn die Berechtigung nicht erlaubt ist. captured-surface-controlExperimentell-
Steuert, ob das Dokument die Captured Surface Control API verwenden darf. Das von den Hauptmethoden der API zurückgegebene Promise wird mit einem
NotAllowedError-DOMExceptionabgelehnt, wenn die Berechtigung nicht erlaubt ist. compute-pressureExperimentell-
Steuert den Zugriff auf die Compute Pressure API.
cross-origin-isolatedExperimentell-
Steuert, ob das aktuelle Dokument als cross-origin isolated behandelt werden kann.
deferred-fetchExperimentell-
Steuert die Zuweisung des
fetchLater()-Kontingents des obersten Ursprungs. deferred-fetch-minimalExperimentell-
Steuert die Zuweisung des gemeinsamen Cross-Origin-Unterrahmen-
fetchLater()-Kontingents](/de/docs/Web/API/fetchLater_API/fetchLater_quotas). display-captureExperimentell-
Steuert, ob das aktuelle Dokument die
getDisplayMedia()-Methode verwenden darf, um Bildschirminhalte aufzuzeichnen. Wenn diese Policy deaktiviert ist, lehnt das Promise, das vongetDisplayMedia()zurückgegeben wird, mit einemNotAllowedError-DOMExceptionab, wenn die Erlaubnis, die Bildschirmwiedergabeinhalte aufzuzeichnen, nicht erteilt wurde. encrypted-mediaExperimentell-
Steuert, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das
Promise, das vonNavigator.requestMediaKeySystemAccess()zurückgegeben wird, mit einemSecurityError-DOMExceptionab. fullscreenExperimentell-
Steuert, ob das aktuelle Dokument
Element.requestFullscreen()verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das zurückgegebenePromisemit einemTypeErrorab. gamepadExperimentell-
Steuert, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Policy deaktiviert ist, werden Aufrufe an
Navigator.getGamepads()einenSecurityError-DOMExceptionauslösen, und diegamepadconnected- undgamepaddisconnected-Ereignisse werden nicht ausgelöst. geolocationExperimentell-
Steuert, ob das aktuelle Dokument die
Geolocation-Schnittstelle verwenden darf. Wenn diese Policy deaktiviert ist, führen Aufrufe vongetCurrentPosition()undwatchPosition()dazu, dass die Rückruffunktionen dieser Funktionen mit einemGeolocationPositionError-CodePERMISSION_DENIEDaufgerufen werden. gyroscopeExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Orientierung des Geräts über die
Gyroscope-Schnittstelle sammeln darf. hidExperimentell-
Steuert, ob das aktuelle Dokument die WebHID API verwenden darf, um ungewöhnliche menschliche Schnittstellengeräte, wie alternative Tastaturen oder Gamepads, zu verbinden.
identity-credentials-getExperimentell-
Steuert, ob das aktuelle Dokument die Federated Credential Management API (FedCM) verwenden darf.
idle-detectionExperimentell-
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 in Chat-Anwendungen als "verfügbar"/"abwesend" zu melden.
language-detectorExperimentell-
Steuert den Zugriff auf die Sprachenerkennungsfunktionen der Translator and Language Detector APIs.
local-fontsExperimentell-
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). magnetometerExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Orientierung des Geräts über die
Magnetometer-Schnittstelle sammeln darf. microphoneExperimentell-
Steuert, ob das aktuelle Dokument Audioeingabegeräte verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das
Promise, das vonMediaDevices.getUserMedia()zurückgegeben wird, mit einemNotAllowedError-DOMExceptionab. midiExperimentell-
Steuert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Policy deaktiviert ist, lehnt das
Promise, das vonNavigator.requestMIDIAccess()zurückgegeben wird, mit einemSecurityError-DOMExceptionab. on-device-speech-recognitionExperimentell-
Steuert den Zugriff auf die On-Device-Spracherkennung der Web Speech API.
otp-credentialsExperimentell-
Steuert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein einmaliges Passwort (OTP) aus einer speziell formatierten SMS-Nachricht anzufordern, die vom Server der App gesendet wird, z. B. über
navigator.credentials.get({otp: ..., ...}). paymentExperimentell-
Steuert, ob das aktuelle Dokument die Payment Request API verwenden darf. Wenn diese Policy aktiviert ist, wird der
PaymentRequest()-Konstruktor einenSecurityError-DOMExceptionwerfen. picture-in-pictureExperimentell-
Steuert, ob das aktuelle Dokument ein Video im Bild-in-Bild-Modus über die entsprechende API abspielen darf.
publickey-credentials-createExperimentell-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um neue asymmetrische Schlüsselanmeldedaten zu erstellen, z. B. über
navigator.credentials.create({publicKey: ..., ...}). publickey-credentials-getExperimentell-
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-lockExperimentell-
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.
serialExperimentell-
Steuert, ob das aktuelle Dokument die Web Serial API verwenden darf, um mit seriellen Geräten zu kommunizieren, entweder direkt verbunden über einen seriellen Port oder über USB- oder Bluetooth-Geräte, die einen seriellen Port emulieren.
speaker-selectionExperimentell-
Steuert, ob das aktuelle Dokument die Audio Output Devices API verwenden darf, um Lautsprecher aufzulisten und auszuwählen.
storage-accessExperimentell-
Steuert, ob ein Dokument, das in einem Drittanbieter-Kontext geladen ist (d.h. eingebettet in einem
<iframe>), die Storage Access API verwenden darf, um Zugriff auf nicht partitionierte Cookies anzufordern. translatorExperimentell-
Steuert den Zugriff auf die Übersetzungsfunktionen der Translator and Language Detector APIs.
summarizerExperimentell-
Steuert den Zugriff auf die Summarizer API.
usbExperimentell-
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 Text, Links, Bilder und andere Inhalte an beliebige Ziele der Wahl des Benutzers freizugeben, z.B. mobile Apps. window-managementExperimentell-
Steuert, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Bildschirmen zu verwalten.
xr-spatial-trackingExperimentell-
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 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 Komma getrennten Liste von Policies gesendet wird oder indem ein separater Header für jede Policy gesendet wird.
Beispielsweise 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 der zugelassene Ursprung auch in der Allowlist für die übergeordnete Seite enthalten sein. Aufgrund dieses Vererbungverhaltens ist es eine gute Idee, die breiteste akzeptable Unterstützung für eine Funktion im HTTP-Header anzugeben und dann den Unterbereich der Unterstützung, den Sie in jedem <iframe> benötigen, zu spezifizieren.
Um allen Ursprüngen den Zugriff auf Geolocation zu erlauben, würden Sie dies tun:
<iframe src="https://example.com" allow="geolocation *"></iframe>
Um eine Policy 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>
Das ist wichtig: Standardmäßig wird eine Policy nicht auf den Ursprung, zu dem das <iframe> navigiert, angewendet, wenn ein <iframe> zu einem anderen Ursprung navigiert. Indem Sie den Ursprung, zu dem das <iframe> navigiert, im allow-Attribut auflisten, wird die ursprünglich auf das <iframe> angewendete Permissions-Policy auf den Ursprung angewendet, zu dem das <iframe> navigiert.
Mehrere Funktionen können gleichzeitig gesteuert werden, indem eine durch Semikolon getrennte Liste von Policy-Direktiven im allow-Attribut einbezogen wird.
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>
Es ist erwähnenswert, dass der src-Wert besonders zu erwähnen ist. Wir haben oben erwähnt, dass bei Verwendung dieses Allowlist-Wertes die zugeordnete 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 im allow aufgeführte Funktionen, also sind die folgenden äquivalent:
<iframe src="https://example.com" allow="geolocation 'src'"></iframe>
<iframe src="https://example.com" allow="geolocation"></iframe>
Zugriff auf mächtige Funktionen verweigern
SecureCorp Inc. möchte die Mikrofon- (zum Beispiel MediaDevices.getUserMedia()) und Geolocation-APIs in seiner Anwendung deaktivieren. Dies kann durch Verwendung des folgenden Antwort-Headers geschehen:
Permissions-Policy: microphone=(), geolocation=()
Durch die Angabe von () für die Ursprungs-Liste werden die angegebenen Funktionen für alle Browsing-Kontexte deaktiviert (dazu gehören alle <iframe>s), unabhängig von ihrem Ursprung.
Kombination von HTTP-Header und <iframe>-Richtlinien
Nehmen wir beispielsweise an, dass wir die Nutzung von Geolocation auf unserem eigenen Ursprung und in eingebetteten Inhalten unseres vertrauenswürdigen Werbenetzwerks aktivieren wollten. 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 wie folgt festlegen:
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>
Wenn ein anderer Ursprung in das <iframe> geladen werden würde, 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> |