Permissions-Policy header
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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 Verwendung von Browserfunktionen in einem Dokument oder in darin enthaltenen <iframe>-Elementen zu erlauben oder zu verweigern.
Verstöße gegen eine Richtlinie können über die Reporting API gemeldet werden.
Berichte können an einen Server gesendet werden, der in einem direktivspezifischen report-to-Parameter per Name angegeben ist, oder andernfalls an den Serverendpunkt mit dem Namen "default" (die Zuordnung zwischen Serverendpunktnamen und URLs wird über den HTTP-Response-Header Reporting-Endpoints festgelegt).
Berichte können auch auf der Seite, für die die Richtlinie durchgesetzt wird, mithilfe eines ReportingObserver beobachtet werden.
Das Format des Berichts und weitere Details werden in PermissionsPolicyViolationReport bereitgestellt.
Weitere Informationen finden Sie im Hauptartikel zu Permissions Policy.
| Header-Typ | Response-Header |
|---|
Syntax
# Single directive
Permissions-Policy: <directive>=<allowlist>
# Single directive with reporting endpoint
Permissions-Policy: <directive>=<allowlist>;report-to=<endpoint>
# Multiple directives, with and without server reporting endpoints
Permissions-Policy: <directive>=<allowlist>, <directive>=<allowlist>;report-to=<endpoint>, ...
Der Header kann verwendet werden, um die Allowlists für eine oder mehrere Direktiven festzulegen, sowie optional einen direktivspezifischen report-to-Parameter, der den Serverendpunkt angibt, an den Berichte über Richtlinienverstöße gesendet werden sollen.
Die Einträge für jede Direktive werden durch Kommas getrennt.
<directive>-
Die Permissions-Policy-Direktive, auf die die
allowlistangewendet werden soll. Eine Liste der zulässigen Direktivnamen finden Sie weiter unten unter Direktiven. <allowlist>-
Eine Allowlist ist eine Liste von Origins, die einen oder mehrere der folgenden, in Klammern eingeschlossenen und durch Leerzeichen getrennten Werte enthält:
*(Wildcard)-
Die Funktion wird in diesem Dokument und in allen verschachtelten Browsing-Kontexten (
<iframe>s) unabhängig von ihrem Origin erlaubt. ()(leere Allowlist)-
Die Funktion wird in Browsing-Kontexten der obersten Ebene und verschachtelten Browsing-Kontexten deaktiviert. Das Äquivalent für
<iframe>-allow-Attribute ist'none'. self-
Die Funktion wird in diesem Dokument und nur in allen verschachtelten Browsing-Kontexten (
<iframe>s) mit demselben Origin erlaubt. Die Funktion ist in Cross-Origin-Dokumenten in verschachtelten Browsing-Kontexten nicht erlaubt.selfkann als Kurzform fürhttps://your-site.example.comangesehen werden. Das Äquivalent für<iframe>-allow-Attribute istself. src-
Die Funktion wird in diesem
<iframe>erlaubt, sofern das darin geladene Dokument vom selben Origin wie die URL in seinem src-Attribut stammt. Dieser Wert wird nur im<iframe>-allow-Attribut verwendet und ist der Standardwert fürallowlistin<iframe>s. "<origin>"-
Die Funktion ist für bestimmte Origins erlaubt (zum Beispiel
"https://a.example.com"). Origins sollten durch Leerzeichen getrennt werden. Beachten Sie, dass Origins in<iframe>-allow-Attributen nicht in Anführungszeichen stehen.
Die Werte
*und()dürfen nur allein verwendet werden, währendselfundsrcin Kombination mit einem oder mehreren Origins verwendet werden können.Hinweis: Direktiven haben eine Standard-Allowlist, die für den HTTP-Header
Permissions-Policyimmer eine von*,selfodernoneist und das Standardverhalten bestimmt, wenn sie nicht ausdrücklich in einer Richtlinie aufgeführt sind. Diese werden auf den jeweiligen Referenzseiten für Direktiven angegeben. Für<iframe>-allow-Attribute ist das Standardverhalten immersrc. report-to=<endpoint>Optional-
Der Parameter
report-tokann verwendet werden, um den Namen eines Reporting-Endpunkts anzugeben, an den Berichte gesendet werden, wenn ein Richtlinienverstoß für die zugehörige Direktive vorliegt. Der Endpunktname und seine zugehörige URL müssen in einem separaten HTTP-Response-HeaderReporting-Endpointsangegeben werden.Wenn er weggelassen wird, werden Berichte an den
default-Reporting-Endpunkt gesendet, sofern einer definiert wurde. Weitere Informationen finden Sie unter Reporting API.
Wo unterstützt, können Sie Wildcards in Permissions-Policy-Origins einschließen. Das bedeutet, dass Sie nicht mehrere verschiedene Subdomains explizit in einer Allowlist angeben müssen, sondern sie alle in einem einzigen Origin mit einer Wildcard angeben können.
Also statt:
("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")
können Sie Folgendes angeben:
("https://example.com" "https://*.example.com")
Hinweis:
"https://*.example.com" entspricht nicht "https://example.com".
Direktiven
accelerometer-
Steuert, ob das aktuelle Dokument über die
Accelerometer-Schnittstelle Informationen über die Beschleunigung des Geräts erfassen darf. ambient-light-sensor-
Steuert, ob das aktuelle Dokument über die
AmbientLightSensor-Schnittstelle Informationen über die Lichtmenge in der Umgebung des Geräts erfassen darf. aria-notify-
Steuert, ob das aktuelle Dokument die Methode
ariaNotify()verwenden darf, um Ankündigungen für Screenreader auszulösen. attribution-reporting-
Steuert, ob das aktuelle Dokument die Attribution Reporting API verwenden darf.
autoplay-
Steuert, ob das aktuelle Dokument Medien automatisch wiedergeben darf, die über die
HTMLMediaElement-Schnittstelle angefordert werden. Wenn diese Richtlinie deaktiviert ist und keine Benutzerinteraktionen stattgefunden haben, wird das vonHTMLMediaElement.play()zurückgegebenePromisemit einerNotAllowedError-DOMExceptionabgelehnt. Dasautoplay-Attribut der Elemente<audio>und<video>wird ignoriert. bluetooth-
Steuert, ob die Verwendung der Web Bluetooth API erlaubt ist. Wenn diese Richtlinie deaktiviert ist, geben die Methoden des von
Navigator.bluetoothzurückgegebenenBluetooth-Objekts entwederfalsezurück oder lehnen das zurückgegebenePromisemit einerSecurityError-DOMExceptionab. browsing-topics-
Steuert den Zugriff auf die Topics API. Wenn eine Richtlinie die Verwendung der Topics API ausdrücklich untersagt, schlagen alle Versuche fehl, die Methode
Document.browsingTopics()aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics-Header zu senden, und zwar mit einerNotAllowedError-DOMException. camera-
Steuert, ob das aktuelle Dokument Videoeingabegeräte verwenden darf. Das von
getUserMedia()zurückgegebenePromisewird mit einerNotAllowedError-DOMExceptionabgelehnt, wenn die Berechtigung nicht erteilt ist. captured-surface-control-
Steuert, ob das Dokument die Captured Surface Control API verwenden darf. Das von den Hauptmethoden der API zurückgegebene Promise wird mit einer
NotAllowedError-DOMExceptionabgelehnt, wenn die Berechtigung nicht erteilt ist. ch-ua-high-entropy-values-
Steuert, ob das Dokument die Methode
NavigatorUAData.getHighEntropyValues()verwenden darf, um User-Agent-Daten mit hoher Entropie abzurufen. Wenn die Berechtigung nicht erteilt ist, gibt die Methode nur die Daten mit geringer Entropiebrands,mobileundplatformzurück. compute-pressure-
Steuert den Zugriff auf die Compute Pressure API.
cross-origin-isolated-
Steuert, ob das aktuelle Dokument als cross-origin-isoliert behandelt werden kann.
deferred-fetch-
Steuert die Zuweisung des
fetchLater()-Kontingents des Origins der obersten Ebene. deferred-fetch-minimal-
Steuert die Zuweisung des gemeinsamen
fetchLater()-Kontingents für Cross-Origin-Subframes. display-capture-
Steuert, ob das aktuelle Dokument die Methode
getDisplayMedia()verwenden darf, um Bildschirminhalte zu erfassen. Wenn diese Richtlinie deaktiviert ist, wird das vongetDisplayMedia()zurückgegebene Promise mit einerNotAllowedError-DOMExceptionabgelehnt, falls keine Berechtigung zum Erfassen der Bildschirminhalte erteilt wird. encrypted-media-
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 einerSecurityError-DOMExceptionabgelehnt. fullscreen-
Steuert, ob das aktuelle Dokument
Element.requestFullscreen()verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das zurückgegebenePromisemit einemTypeErrorabgelehnt. gamepad-
Steuert, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Richtlinie deaktiviert ist, lösen Aufrufe von
Navigator.getGamepads()eineSecurityError-DOMExceptionaus, und die Ereignissegamepadconnectedundgamepaddisconnectedwerden nicht ausgelöst. geolocation-
Steuert, ob das aktuelle Dokument die
Geolocation-Schnittstelle verwenden darf. Wenn diese Richtlinie deaktiviert ist, führen Aufrufe vongetCurrentPosition()undwatchPosition()dazu, dass die Callbacks dieser Funktionen mit einemGeolocationPositionError-Code vonPERMISSION_DENIEDaufgerufen werden. gyroscope-
Steuert, ob das aktuelle Dokument über die
Gyroscope-Schnittstelle Informationen über die Ausrichtung des Geräts erfassen darf. hid-
Steuert, ob das aktuelle Dokument die WebHID API verwenden darf, um eine Verbindung zu ungewöhnlichen oder exotischen Human-Interface-Geräten wie alternativen Tastaturen oder Gamepads herzustellen.
identity-credentials-get-
Steuert, ob das aktuelle Dokument die Federated Credential Management API (FedCM) verwenden darf.
idle-detection-
Steuert, 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 den Status „verfügbar“/„abwesend“ zu melden.
language-detector-
Steuert den Zugriff auf die Funktionalität zur Spracherkennung der Translator and Language Detector APIs.
language-model-
Steuert den Zugriff auf die Prompt API.
local-fonts-
Steuert, ob das aktuelle Dokument über die Methode
Window.queryLocalFonts()Daten zu den lokal installierten Schriftarten des Benutzers erfassen darf (siehe auch die Local Font Access API). local-network-
Steuert, ob das aktuelle Dokument Netzwerkanfragen an lokale Adressen stellen darf.
local-network-access-
Steuert, ob das aktuelle Dokument Netzwerkanfragen an lokale und Loopback-Adressen stellen darf. Diese Richtlinien-Direktive ist ein Alias für die detaillierteren Direktiven
local-networkundloopback-network. loopback-network-
Steuert, ob das aktuelle Dokument Netzwerkanfragen an Loopback-Adressen stellen darf.
magnetometer-
Steuert, ob das aktuelle Dokument über die
Magnetometer-Schnittstelle Informationen über die Ausrichtung des Geräts erfassen darf. microphone-
Steuert, ob das aktuelle Dokument Audioeingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
MediaDevices.getUserMedia()zurückgegebenePromisemit einerNotAllowedError-DOMExceptionabgelehnt. midi-
Steuert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMIDIAccess()zurückgegebenePromisemit einerSecurityError-DOMExceptionabgelehnt. on-device-speech-recognition-
Steuert den Zugriff auf die Funktionalität zur Spracherkennung auf dem Gerät der Web Speech API.
otp-credentials-
Steuert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalkennwort (OTP) aus einer speziell formatierten SMS-Nachricht anzufordern, die vom Server der Anwendung gesendet wurde, d.h. über
navigator.credentials.get({otp: ..., ...}). payment-
Steuert, ob das aktuelle Dokument die Payment Request API verwenden darf. Wenn diese Richtlinie aktiviert ist, löst der Konstruktor
PaymentRequest()eineSecurityError-DOMExceptionaus. picture-in-picture-
Steuert, ob das aktuelle Dokument ein Video über die entsprechende API im Picture-in-Picture-Modus wiedergeben darf.
private-state-token-issuance-
Steuert die Verwendung von
token-request-Operationen für private state token. private-state-token-redemption-
Steuert die Verwendung von
token-redemption- undsend-redemption-record-Operationen für private state token. publickey-credentials-create-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um neue asymmetrische Schlüssel-Credentials zu erstellen, d.h. über
navigator.credentials.create({publicKey: ..., ...}). publickey-credentials-get-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um bereits gespeicherte Public-Key-Credentials abzurufen, d.h. über
navigator.credentials.get({publicKey: ..., ...}). screen-wake-lock-
Steuert, ob das aktuelle Dokument die Screen Wake Lock API verwenden darf, um anzugeben, dass das Gerät den Bildschirm nicht ausschalten oder abdunkeln soll.
serial-
Steuert, ob das aktuelle Dokument die Web Serial API verwenden darf, um mit seriellen Geräten zu kommunizieren, die entweder direkt über einen seriellen Anschluss verbunden sind oder über USB- oder Bluetooth-Geräte, die einen seriellen Anschluss emulieren.
speaker-selection-
Steuert, ob das aktuelle Dokument die Audio Output Devices API verwenden darf, um Lautsprecher aufzulisten und auszuwählen.
storage-access-
Steuert, ob ein in einem Drittanbieter-Kontext geladenes Dokument (d.h. in ein
<iframe>eingebettet) die Storage Access API verwenden darf, um Zugriff auf nicht partitionierte Cookies anzufordern. translator-
Steuert den Zugriff auf die Übersetzungsfunktionalität der Translator and Language Detector APIs.
summarizer-
Steuert den Zugriff auf die Summarizer API.
unload-
Steuert, ob das aktuelle Dokument
unload-Event-Handler ausführen darf. usb-
Steuert, ob das aktuelle Dokument die WebUSB API verwenden darf.
-
Steuert, ob das aktuelle Dokument
Navigator.share()der Web Share API verwenden darf, um Text, Links, Bilder und andere Inhalte an beliebige Ziele nach Wahl des Benutzers zu teilen, zum Beispiel mobile Apps. window-management-
Steuert, ob das aktuelle Dokument die Window Management API verwenden darf, um Fenster auf mehreren Displays zu verwalten.
xr-spatial-tracking-
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 Origins den Zugriff auf Geolocation zu erlauben, würden Sie Folgendes verwenden:
Permissions-Policy: geolocation=*
Oder um den Zugriff für eine Teilmenge von Origins zu erlauben, würden Sie Folgendes verwenden:
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 für jede Richtlinie ein separater Header gesendet wird.
Die folgenden Angaben sind beispielsweise 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
Damit für ein <iframe> eine Funktion aktiviert ist, muss sein erlaubter Origin auch in der Allowlist der übergeordneten Seite enthalten sein. Aufgrund dieses Vererbungsverhaltens ist es sinnvoll, im HTTP-Header die weiteste akzeptable Unterstützung für eine Funktion anzugeben und dann in jedem <iframe> die benötigte Teilmenge der Unterstützung festzulegen.
Um allen Origins den Zugriff auf Geolocation zu erlauben, würden Sie Folgendes verwenden:
<iframe src="https://example.com" allow="geolocation *"></iframe>
Um eine Richtlinie auf den aktuellen Origin und andere anzuwenden, würden Sie Folgendes verwenden:
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com"></iframe>
Dies ist wichtig: Wenn ein <iframe> standardmäßig zu einem anderen Origin navigiert, wird die Richtlinie nicht auf den Origin angewendet, zu dem das <iframe> navigiert. Indem Sie den Origin, zu dem das <iframe> navigiert, im allow-Attribut aufführen, wird die Permissions Policy, die auf das ursprüngliche <iframe> angewendet wurde, auf den Origin angewendet, zu dem das <iframe> navigiert.
Mehrere Funktionen können gleichzeitig gesteuert werden, indem eine durch Semikolons getrennte Liste von Richtlinien-Direktiven in das allow-Attribut aufgenommen wird.
<iframe
src="https://example.com"
allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>
Der Wert src verdient besondere Erwähnung. Wie oben erwähnt, bedeutet die Verwendung dieses Allowlist-Werts, dass die zugehörige Funktion in diesem <iframe> erlaubt wird, sofern das darin geladene Dokument vom selben Origin wie die URL in seinem src-Attribut stammt. Dieser Wert ist der Standardwert für allowlist bei Funktionen, die in allow aufgeführt sind. Daher sind die folgenden Angaben 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 APIs Microphone (zum Beispiel MediaDevices.getUserMedia()) und Geolocation in seiner Anwendung deaktivieren. Dies kann mit dem folgenden Response-Header erfolgen:
Permissions-Policy: microphone=(), geolocation=()
Durch die Angabe von () für die Origin-Liste werden die angegebenen Funktionen für alle Browsing-Kontexte deaktiviert (einschließlich aller <iframe>s), unabhängig von ihrem Origin.
Kombination von HTTP-Header- und <iframe>-Richtlinien
Nehmen wir beispielsweise an, dass wir die Verwendung von Geolocation auf unserem eigenen Origin und in eingebetteten Inhalten unseres vertrauenswürdigen Werbenetzwerks aktivieren möchten. Wir könnten die seitenweite Permissions Policy wie folgt einrichten:
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)
In unseren Werbe-<iframe>s könnten wir den Zugriff auf den Origin https://trusted-ad-network.com wie folgt festlegen:
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>
Wenn ein anderer Origin in <iframe> geladen würde, hätte er keinen Zugriff auf Geolocation:
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>
Verstöße melden
Dieses Beispiel zeigt, wie Sie die Meldung von Permissions-Policy-Verstößen an einen Serverendpunkt konfigurieren.
Die folgenden Response-Header blockieren Geolocation und definieren den Namen des Reporting-Endpunkts für die Funktion als „geo_endpoint“.
Der HTTP-Response-Header Reporting-Endpoints wird verwendet, um die URL dieses Endpunktnamens zu definieren.
Reporting-Endpoints: geo_endpoint="https://example.com/reports"
Permissions-Policy: geolocation=();report-to=geo_endpoint
Hinweis:
Um alle Berichte über Verstöße an denselben Endpunkt zu senden, könnten wir stattdessen den "default"-Reporting-Endpunkt definieren:
Reporting-Endpoints: default="https://example.com/reports"
Permissions-Policy: geolocation=()
Ein Verstoß tritt auf, wenn eine Seite versucht, die blockierte Funktion zu verwenden, beispielsweise:
navigator.geolocation.getCurrentPosition(
() => {},
() => {},
);
Die an den Endpunkt gesendete Berichts-Payload könnte wie folgt aussehen:
[
{
"age": 48512,
"body": {
"columnNumber": 29,
"disposition": "enforce",
"lineNumber": 44,
"message": "Permissions policy violation: geolocation access has been blocked because of a permissions policy applied to the current document.",
"featureId": "geolocation",
"sourceFile": "https://example.com/"
},
"type": "permissions-policy-violation",
"url": "https://example.com/",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
}
]
Hinweis:
Die serverseitige Serialisierung von Verstoßberichten in Chrome verwendet policyId statt featureId für den Funktionsnamen im body eines Serverberichts.
Der von einem ReportingObserver zurückgegebene PermissionsPolicyViolationReport entspricht der Spezifikation.
Spezifikationen
| Spezifikation |
|---|
| Permissions Policy> # permissions-policy-http-header-field> |