Permissions-Policy header
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
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 Antwortheader bietet einen Mechanismus zum Erlauben und Verweigern der Nutzung von Browser-Funktionen in einem Dokument oder innerhalb eines <iframe>-Elements im Dokument.
Für weitere Informationen siehe den Hauptartikel zur Permissions-Policy.
| Headertyp | Response header |
|---|
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>-
Die Permissions Policy-Direktive, auf die die
allowlistangewendet 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 annimmt, getrennt durch Leerzeichen:
*(Wildcard)-
Die Funktion wird in diesem Dokument und 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) im selben Ursprung erlaubt. Die Funktion ist in ursprungsübergreifenden Dokumenten in verschachtelten 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 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 (zum Beispiel
"https://a.example.com"). Ursprünge sollten durch Leerzeichen getrennt werden. Beachten Sie, dass Ursprünge in<iframe>-Allow-Attributen nicht in Anführungszeichen gesetzt werden.
Die Werte
*und()dürfen nur alleine verwendet werden, währendselfundsrcin Kombination mit einem oder mehreren Ursprüngen verwendet werden dürfen.Hinweis: Direktiven haben eine Standard-Allowlist, die immer einer der
*,selfodernonefür denPermissions-Policy-HTTP-Header ist und das Standardverhalten regelt, wenn sie in einer Richtlinie nicht explizit aufgeführt werden. Diese sind auf den einzelnen Direktivenreferenzseiten angegeben. Für<iframe>-allow-Attribute ist das Standardverhalten immersrc.
Wo unterstützt, können Sie Platzhalter in Permissions Policy-Ursprüngen verwenden. Dies bedeutet, dass anstelle der expliziten Angabe mehrerer verschiedener Subdomains in einer Allowlist, Sie sie 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" stimmt nicht mit "https://example.com" überein.
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 Lichtverhältnisse 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-reportingVeraltet-
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 wiedergegeben werden dürfen. Wenn diese Richtlinie deaktiviert ist und es keine Benutzeraktionen gab, wird das vonHTMLMediaElement.play()zurückgegebenePromisemit einemNotAllowedErrorDOMExceptionabgelehnt. Das autoplay-Attribut auf<audio>- und<video>-Elementen wird ignoriert. bluetoothExperimentell-
Steuert, ob die Verwendung der Web Bluetooth API erlaubt ist. Wenn diese Richtlinie deaktiviert ist, geben die Methoden des
Bluetooth-Objekts, das vonNavigator.bluetoothzurückgegeben wird, entwederfalsezurück oder lehnen das zurückgegebenePromisemit einemSecurityErrorDOMExceptionab. browsing-topicsVeraltet Nicht standardisiert-
Steuert den Zugriff auf die Topics API. Wenn eine Richtlinie die Verwendung der Topics API ausdrücklich verbietet, schlagen alle Versuchsanfragen an die Methode
Document.browsingTopics()oder das Senden einer Anfrage mit einemSec-Browsing-Topics-Header mit einemNotAllowedErrorDOMExceptionfehl. cameraExperimentell-
Steuert, ob das aktuelle Dokument Videogeräte verwenden darf. Das von
getUserMedia()zurückgegebenePromisewird mit einemNotAllowedErrorDOMExceptionabgelehnt, wenn die Erlaubnis nicht erteilt ist. captured-surface-controlExperimentell-
Steuert, ob das Dokument die Captured Surface Control API verwenden darf. Das von den Hauptmethoden der API zurückgegebene Versprechen wird mit einem
NotAllowedErrorDOMExceptionabgelehnt, wenn die Erlaubnis nicht erteilt ist. ch-ua-high-entropy-valuesExperimentell-
Steuert, ob das Dokument die Methode
NavigatorUAData.getHighEntropyValues()verwenden darf, um hochgradige Benutzeragentdaten abzurufen. Wenn die Erlaubnis nicht erteilt wird, gibt die Methode nur diebrands,mobileundplatformniedrig entropische Daten zurück. compute-pressureExperimentell-
Steuert den Zugriff auf die Compute Pressure API.
cross-origin-isolatedExperimentell-
Steuert, ob das aktuelle Dokument als Cross-Origin Isolation behandelt werden kann.
deferred-fetchExperimentell-
Steuert die Zuweisung des
fetchLater()Kontingents des Ursprungs auf oberster Ebene. deferred-fetch-minimalExperimentell-
Steuert die Zuweisung des geteilten ursprungsübergreifenden Unterrahmenkontingents
fetchLater(). display-captureExperimentell-
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 Versprechen mit einemNotAllowedErrorDOMExceptionabgelehnt, wenn die Erlaubnis nicht erteilt ist, den Bildschirm zu erfassen. encrypted-mediaExperimentell-
Steuert, ob das aktuelle Dokument die Encrypted Media Extensions API (EME) verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMediaKeySystemAccess()zurückgegebenePromisemit einemSecurityErrorDOMExceptionabgelehnt. fullscreenExperimentell-
Steuert, ob das aktuelle Dokument
Element.requestFullscreen()verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das zurückgegebenePromisemit einemTypeErrorabgelehnt. gamepadExperimentell-
Steuert, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Richtlinie deaktiviert ist, schlagen Aufrufe von
Navigator.getGamepads()mit einemSecurityErrorDOMExceptionfehl, und die Ereignissegamepadconnectedsowiegamepaddisconnectedwerden nicht ausgelöst. geolocationExperimentell-
Steuert, ob das aktuelle Dokument die
Geolocation-Schnittstelle verwenden darf. Wenn diese Richtlinie deaktiviert ist, führen Aufrufe vongetCurrentPosition()undwatchPosition()dazu, dass die Rückrufe dieser Funktionen mit einemGeolocationPositionError-Code vonPERMISSION_DENIEDaufgerufen werden. gyroscopeExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über die
Gyroscope-Schnittstelle sammeln darf. hidExperimentell-
Steuert, ob das aktuelle Dokument die WebHID API verwenden darf, um sich mit unüblichen oder exotischen Mensch-Maschine-Schnittstellengeräten wie alternativen 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, beispielsweise um den Status "verfügbar"/"abwesend" in Chat-Anwendungen zu melden.
language-detectorExperimentell-
Steuert den Zugriff auf die Sprachenerkennungsfunktionalität 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 Ausrichtung des Geräts über die
Magnetometer-Schnittstelle sammeln darf. microphoneExperimentell-
Steuert, ob das aktuelle Dokument Audioeingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
MediaDevices.getUserMedia()zurückgegebenePromisemit einemNotAllowedErrorDOMExceptionabgelehnt. midiExperimentell-
Steuert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMIDIAccess()zurückgegebenePromisemit einemSecurityErrorDOMExceptionabgelehnt. on-device-speech-recognitionExperimentell-
Steuert den Zugriff auf die auf dem Gerät stattfindende Sprachenerkennung der Web Speech API.
otp-credentialsExperimentell-
Steuert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalkennwort (OTP) von einer speziell formatierten SMS-Nachricht anzufordern, die vom Server der App gesendet wird, d.h. über
navigator.credentials.get({otp: ..., ...}). paymentExperimentell-
Steuert, ob das aktuelle Dokument die Payment Request API verwenden darf. Wenn diese Richtlinie aktiviert ist, löst der
PaymentRequest()-Konstruktor einenSecurityErrorDOMExceptionaus. picture-in-pictureExperimentell-
Steuert, ob das aktuelle Dokument ein Video im Bild-in-Bild-Modus über die entsprechende API abspielen darf.
private-state-token-issuanceExperimentell-
Steuert die Verwendung von Privater Token
token-requestOperationen. private-state-token-redemptionExperimentell-
Steuert die Verwendung von Privater Token
token-redemptionundsend-redemption-recordOperationen. publickey-credentials-createExperimentell-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden kann, um neue asymmetrische Schlüsselanmeldeinformationen zu erstellen, d.h. über
navigator.credentials.create({publicKey: ..., ...}). publickey-credentials-getExperimentell-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden kann, um bereits gespeicherte öffentliche Schlüsselanmeldeinformationen abzurufen, d.h. über
navigator.credentials.get({publicKey: ..., ...}). screen-wake-lockExperimentell-
Steuert, ob das aktuelle Dokument die Screen Wake Lock API verwenden darf, um anzugeben, 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 über einen seriellen Anschluss oder über USB- oder Bluetooth-Geräte, die einen seriellen Anschluss 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 wird (d.h. eingebettet in ein
<iframe>), die Storage Access API verwenden darf, um Zugriff auf unpartitionierte Cookies anzufordern. translatorExperimentell-
Steuert den Zugriff auf die Übersetzungsfunktionalität 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 zu teilen, z.B. mobile Apps. window-managementExperimentell-
Steuert, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Displays 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 Folgendes tun:
Permissions-Policy: geolocation=*
Oder 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 durch das Senden des Headers mit einer kommagetrennten Liste von Richtlinien oder durch das Senden eines separaten Headers für jede Richtlinie gesteuert werden.
Beispielsweise sind folgende Beispiele 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
Für ein <iframe>, um eine Funktion aktiviert zu haben, muss auch der erlaubte Ursprung in der Allowlist für die übergeordnete Seite vorhanden sein. Aufgrund dieses Vererbungverhaltens ist es eine gute Idee, die breiteste akzeptable Unterstützung für eine Funktion im HTTP-Header zu spezifizieren und dann die Teilmenge der Unterstützung, die Sie in jedem <iframe> benötigen.
Um allen Ursprüngen den Zugriff auf Geolocation zu erlauben, würden Sie Folgendes tun:
<iframe src="https://example.com" allow="geolocation *"></iframe>
Um eine Richtlinie 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>
Dies ist wichtig: Standardmäßig, wenn ein <iframe> zu einem anderen Ursprung navigiert, wird die Richtlinie nicht auf den Ursprung angewendet, auf den das <iframe> navigiert. Indem der Ursprung, auf den das <iframe> navigiert, 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 gesteuert werden, indem eine durch Semikolon getrennte Liste von Richtliniendirektiven im allow-Attribut angegeben wird.
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>
Es ist erwähnenswert, den src-Wert besonders zu erwähnen. Wir haben oben erwähnt, dass die Verwendung dieses Allowlist-Wertes bedeuten wird, dass die zugeordnete Funktion in diesem <iframe> erlaubt wird, solange das darin geladene Dokument vom selben Ursprung stammt wie die URL im src-Attribut. Dieser Wert ist der Standardallowlist-Wert für Funktionen, die in allow aufgeführt sind, daher sind die folgenden gleichwertig:
<iframe src="https://example.com" allow="geolocation 'src'"></iframe>
<iframe src="https://example.com" allow="geolocation"></iframe>
Zugriff auf leistungsstarke Funktionen verweigern
SecureCorp Inc. möchte die Mikrofon- (z.B. MediaDevices.getUserMedia()) und Geolocation-APIs in seiner Anwendung deaktivieren. Das kann mithilfe des folgenden Antwortheaders erreicht werden:
Permissions-Policy: microphone=(), geolocation=()
Durch die Angabe von () für die Ursprungsliste werden die angegebenen Funktionen für alle Browsing-Kontexte deaktiviert (einschließlich aller <iframe>s), unabhängig von ihrem Ursprung.
Kombination von HTTP-Header und <iframe>-Richtlinien
Nehmen wir zum Beispiel an, dass wir die Nutzung von Geolocation auf unserem eigenen Ursprung und in eingebetteten Inhalten unseres vertrauenswürdigen Ad-Netzwerks ermöglichen wollten. Wir könnten die seitenweite Permissions Policy folgendermaßen einrichten:
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)
In unseren Werbeanzeigen-<iframe>s könnten wir den Zugriff auf den https://trusted-ad-network.com-Ursprung so einrichten:
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>
Wenn ein anderer Ursprung schließlich in das <iframe> geladen wird, hätte es keinen Zugriff auf Geolocation:
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>
Spezifikationen
| Specification |
|---|
| Permissions Policy> # permissions-policy-http-header-field> |