Permissions-Policy header
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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 von <iframe>-Elementen im Dokument zu erlauben oder zu verweigern.
Verletzungen einer Richtlinie können mit der Reporting API gemeldet werden.
Berichte können an einen Server gesendet werden, der mit einem Namen in einem pro-Richtlinie angegebenen report-to-Parameter angegeben ist, oder andernfalls an den Serverendpunkt namens "default" (die Zuordnung zwischen Serverendpunktnamen und URLs wird mit dem Reporting-Endpoints HTTP-Antwort-Header festgelegt).
Berichte können auch auf der Seite beobachtet werden, für die die Richtlinie durchgesetzt wird, unter Verwendung eines ReportingObserver.
Das Format des Berichts und zusätzliche Details werden in PermissionsPolicyViolationReport bereitgestellt.
Weitere Informationen finden Sie im Hauptartikel zur Permissions-Policy.
| Header-Typ | Antwort-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 und optional einen report-to-Parameter pro Direktive anzugeben, der den Serverendpunkt angibt, an den Berichte über Richtlinienverletzungen gesendet werden sollen.
Die Einträge für jede Direktive sind durch Kommas getrennt.
<directive>-
Die Permissions-Policy-Direktive, auf die die
Allowlistangewendet werden soll. Siehe unten Direktiven für eine Liste der erlaubten Direktivnamen. <allowlist>-
Eine Allowlist ist eine Liste von Ursprüngen, die einen oder mehrere der folgenden Werte in Klammern enthält, die durch Leerzeichen getrennt sind:
*(Wildcard)-
Die Funktion wird in diesem Dokument und allen eingebetteten Browsing-Kontexten (
<iframe>s) unabhängig von ihrem Ursprung erlaubt. ()(leere Allowlist)-
Die Funktion ist in obersten und eingebetteten Browsing-Kontexten deaktiviert. Das Äquivalent für
<iframe>-allow-Attribute ist'none'. self-
Die Funktion wird in diesem Dokument und in allen eingebetteten Browsing-Kontexten (
<iframe>s) nur im gleichen Ursprung erlaubt. Die Funktion ist in eingebetteten Browsing-Kontexten über Ursprungsgrenzen hinweg 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, solange das darin geladene Dokument vom gleichen 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 sein. Beachten Sie, dass Ursprünge in<iframe>-allow-Attributen nicht in Anführungszeichen geschrieben werden.
Die Werte
*und()dürfen nur allein 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-PolicyHTTP-Header ist, und regelt das Standardverhalten, 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. report-to=<endpoint>Optional-
Der
report-to-Parameter kann verwendet werden, um den Namen eines Berichts-Endpunkts anzugeben, an den Berichte gesendet werden, wenn eine Richtlinienverletzung für die zugehörige Direktive vorliegt. Der Endpunktname und die zugehörige URL müssen in einem separatenReporting-Endpoints-HTTP-Antwort-Header angegeben werden.Wenn er weggelassen wird, werden Berichte an den
default-Berichts-Endpunkt gesendet, falls einer definiert wurde. Siehe Reporting API für weitere Informationen.
Wo unterstützt, können Sie Platzhalter in Permissions Policy Ursprüngen enthalten. Dies bedeutet, dass Sie, anstatt explizit mehrere verschiedene Subdomänen in einer Allowlist anzugeben, alle in einem einzigen Ursprung mit einem Platzhalter angeben können.
Anstatt also:
("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")
könnten Sie angeben:
("https://example.com" "https://*.example.com")
Hinweis:
"https://*.example.com" entspricht nicht "https://example.com".
Direktiven
accelerometer-
Steuert, ob dem aktuellen Dokument erlaubt ist, Informationen über die Beschleunigung des Geräts über die
Accelerometer-Schnittstelle zu sammeln. ambient-light-sensor-
Steuert, ob dem aktuellen Dokument erlaubt ist, Informationen über die Lichtmenge in der Umgebung des Geräts über die
AmbientLightSensor-Schnittstelle zu sammeln. aria-notify-
Steuert, ob dem aktuellen Dokument erlaubt ist, die
ariaNotify()-Methode zu verwenden, um Screenreader-Ankündigungen auszuführen. attribution-reporting-
Steuert, ob dem aktuellen Dokument erlaubt ist, die Attribution Reporting API zu verwenden.
autoplay-
Steuert, ob dem aktuellen Dokument erlaubt ist, Medien automatisch abzuspielen, die über die
HTMLMediaElement-Schnittstelle angefordert werden. Wenn diese Richtlinie deaktiviert ist und keine Nutzerinteraktionen erfolgt sind, wird dasPromise, das vonHTMLMediaElement.play()zurückgegeben wird, mit einemNotAllowedErrorDOMExceptionabgelehnt. Das autoplay-Attribut auf<audio>und<video>-Elementen wird ignoriert. bluetooth-
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-topics-
Steuert den Zugriff auf die Topics API. Wo eine Richtlinie die Verwendung der Topics API explizit verbietet, werden alle Versuche, die
Document.browsingTopics()-Methode aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics-Header zu senden, mit einemNotAllowedErrorDOMExceptionfehlschlagen. camera-
Steuert, ob dem aktuellen Dokument erlaubt ist, Video-Eingabegeräte zu verwenden. Das von
getUserMedia()zurückgegebenePromisewird mit einemNotAllowedErrorDOMExceptionabgelehnt, wenn die Berechtigung nicht erlaubt ist. captured-surface-control-
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 Berechtigung nicht erlaubt ist. ch-ua-high-entropy-values-
Steuert, ob das Dokument die Methode
NavigatorUAData.getHighEntropyValues()verwenden darf, um hochentropische User-Agent-Daten abzurufen. Wenn die Berechtigung nicht erlaubt ist, gibt die Methode nur die niederige Entropiedatenbrands,mobileundplatformzurück. compute-pressure-
Steuert den Zugriff auf die Compute Pressure API.
cross-origin-isolated-
Steuert, ob das aktuelle Dokument als cross-origin isolated behandelt werden kann.
deferred-fetch-
Steuert die Zuweisung des
fetchLater()-Kontingents des höchstleveligen Ursprungs. deferred-fetch-minimal-
Steuert die Zuweisung des gemeinsamen originübergreifenden Unterrahmen-
fetchLater()-Kontingents. 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 Versprechen bei fehlender Erlaubnis zur Erfassung der Display-Inhalte mit einemNotAllowedErrorDOMExceptionabgelehnt. encrypted-media-
Steuert, ob dem aktuellen Dokument die Verwendung der Encrypted Media Extensions API (EME) erlaubt ist. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMediaKeySystemAccess()zurückgegebenePromisemit einemSecurityErrorDOMExceptionabgelehnt. fullscreen-
Steuert, ob dem aktuellen Dokument die Verwendung von
Element.requestFullscreen()erlaubt ist. Wenn diese Richtlinie deaktiviert ist, lehnt das zurückgegebenePromisemit einemTypeErrorab. gamepad-
Steuert, ob dem aktuellen Dokument die Verwendung der Gamepad API erlaubt ist. Wenn diese Richtlinie deaktiviert ist, werfen Aufrufe an
Navigator.getGamepads()einenSecurityErrorDOMException, und diegamepadconnectedundgamepaddisconnectedEreignisse werden nicht ausgelöst. geolocation-
Steuert, ob dem aktuellen Dokument die Verwendung der
Geolocation-Schnittstelle erlaubt ist. Wenn diese Richtlinie deaktiviert ist, bewirken Aufrufe vongetCurrentPosition()undwatchPosition(), dass die Rückrufe dieser Funktionen mit einemGeolocationPositionErrorCode vonPERMISSION_DENIEDaufgerufen werden. gyroscope-
Steuert, ob dem aktuellen Dokument erlaubt ist, Informationen über die Ausrichtung des Geräts über die
Gyroscope-Schnittstelle zu sammeln. hid-
Steuert, ob dem aktuellen Dokument die Verwendung der WebHID API erlaubt ist, um eine Verbindung zu ungewöhnlichen oder exotischen Mensch-Maschine-Schnittgeräte wie alternativen Tastaturen oder Gamepads herzustellen.
identity-credentials-get-
Steuert, ob dem aktuellen Dokument die Verwendung der Federated Credential Management API (FedCM) erlaubt ist.
idle-detection-
Steuert, ob dem aktuellen Dokument die Verwendung der Idle Detection API erlaubt ist, um zu erkennen, wann Nutzer mit ihren Geräten interagieren, zum Beispiel um den Status "verfügbar"/"abwesend" in Chat-Anwendungen zu melden.
language-detector-
Steuert den Zugriff auf die Sprachenerkennungsfunktionalität der Translator and Language Detector APIs.
local-fonts-
Steuert, ob dem aktuellen Dokument die Erfassung von Daten zu den lokal installierten Schriften des Nutzers über die Methode
Window.queryLocalFonts()erlaubt ist (siehe auch die Local Font Access API). magnetometer-
Steuert, ob dem aktuellen Dokument erlaubt ist, Informationen über die Ausrichtung des Geräts über die
Magnetometer-Schnittstelle zu sammeln. microphone-
Steuert, ob dem aktuellen Dokument die Verwendung von Audioeingabegeräten erlaubt ist. Wenn diese Richtlinie deaktiviert ist, wird das von
MediaDevices.getUserMedia()zurückgegebenePromisemit einemNotAllowedErrorDOMExceptionabgelehnt. midi-
Steuert, ob dem aktuellen Dokument die Verwendung der Web MIDI API erlaubt ist. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMIDIAccess()zurückgegebenePromisemit einemSecurityErrorDOMExceptionabgelehnt. on-device-speech-recognition-
Steuert den Zugriff auf die on-device speech recognition-Funktionalität der Web Speech API.
otp-credentials-
Steuert, ob dem aktuellen Dokument die Verwendung der WebOTP API erlaubt ist, um ein Einmalpasswort (OTP) aus einer speziell formatierten SMS-Nachricht anzufordern, die vom Server der App gesendet wird, z.B. über
navigator.credentials.get({otp: ..., ...}). payment-
Steuert, ob dem aktuellen Dokument die Verwendung der Payment Request API erlaubt ist. Wenn diese Richtlinie aktiviert ist, wird der
PaymentRequest()-Konstruktor einenSecurityErrorDOMExceptionauslösen. picture-in-picture-
Steuert, ob dem aktuellen Dokument erlaubt ist, ein Video in einem Bild-im-Bild-Modus über die entsprechende API abzuspielen.
private-state-token-issuance-
Steuert die Verwendung von private state token
token-request-Operationen. private-state-token-redemption-
Steuert die Verwendung von private state token
token-redemption- undsend-redemption-record-Operationen. publickey-credentials-create-
Steuert, ob dem aktuellen Dokument die Verwendung der Web Authentication API erlaubt ist, um neue asymmetrische Schlüsselanmeldeinformationen zu erstellen, z.B. über
navigator.credentials.create({publicKey: ..., ...}). publickey-credentials-get-
Steuert, ob dem aktuellen Dokument die Verwendung der Web Authentication API erlaubt ist, um bereits gespeicherte Public-Key-Anmeldeinformationen abzurufen, z.B. über
navigator.credentials.get({publicKey: ..., ...}). screen-wake-lock-
Steuert, ob das aktuelle Dokument die Verwendung der Screen Wake Lock API erlauben darf, um anzuzeigen, dass das Gerät den Bildschirm nicht ausschalten oder dimmen soll.
serial-
Steuert, ob dem aktuellen Dokument die Verwendung der Web Serial API erlaubt ist, 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-
Steuert, ob das aktuelle Dokument die Verwendung der Audio Output Devices API erlauben darf, um Lautsprecher aufzulisten und auszuwählen.
storage-access-
Steuert, ob ein in einem Drittkontext geladenes Dokument (d.h. eingebettet in ein
<iframe>) die Storage Access API verwenden darf, um Zugriff auf unpartitionierte Cookies anzufordern. translator-
Steuert den Zugriff auf die Übersetzungsfunktionalität der Translator and Language Detector APIs.
summarizer-
Steuert den Zugriff auf die Summarizer API.
usb-
Steuert, ob dem aktuellen Dokument die Verwendung der WebUSB API erlaubt ist.
-
Steuert, ob dem aktuellen Dokument erlaubt ist, die
Navigator.share()der Web Share API zu verwenden, um Text, Links, Bilder und andere Inhalte an beliebige, vom Benutzer ausgewählte Ziele zu teilen, z.B. mobile Apps. window-management-
Steuert, ob das aktuelle Dokument die Verwendung der Window Management API erlauben darf, um Fenster auf mehreren Anzeigen zu verwalten.
xr-spatial-tracking-
Steuert, ob das aktuelle Dokument die Verwendung der WebXR Device API erlauben darf, um mit einer WebXR-Sitzung zu interagieren.
Beispiele
>Grundlegende Nutzung
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 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 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 ein <iframe> eine Funktion aktiviert hat, muss sein erlaubter Ursprung auch in der Allowlist der übergeordneten Seite enthalten sein. Aufgrund dieses Vererbungsvorgehens ist es eine gute Idee, die breiteste akzeptable Unterstützung für eine Funktion im HTTP-Header festzulegen und dann den gewünschten Unterstützungsbereich in jedem <iframe> 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 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 gilt die Richtlinie nicht für den Ursprung, zu dem das <iframe> navigiert, wenn es zu einem anderen Ursprung navigiert. Durch die Auflistung des Ursprungs, zu dem das <iframe> navigiert, im allow-Attribut wird die ursprünglich auf das <iframe> angewendete Permissions-Policy auch auf den Ursprung angewendet, zu dem das <iframe> navigiert.
Mehrere Funktionen können gleichzeitig gesteuert werden, indem eine durch Semikolons 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 ist erwähnenswert, den src-Wert besonders zu erwähnen. Wir haben oben erwähnt, dass die Verwendung dieses Allowlist-Wertes bedeutet, dass die zugehörige Funktion in diesem <iframe> erlaubt wird, solange das darin geladene Dokument vom gleichen Ursprung wie die URL in seinem src-Attribut stammt. Dieser Wert ist der Standardallowlist-Wert für Funktionen, die in allow aufgelistet sind, sodass die folgenden äquivalent sind:
<iframe src="https://example.com" allow="geolocation 'src'"></iframe>
<iframe src="https://example.com" allow="geolocation"></iframe>
Zugang zu leistungsstarken Funktionen verweigern
SecureCorp Inc. möchte die Microphone (z.B. MediaDevices.getUserMedia()) und Geolocation APIs in ihrer Anwendung deaktivieren. Sie können dies mit dem folgenden Antwort-Header tun:
Permissions-Policy: microphone=(), geolocation=()
Indem () für die Ursprüngeliste angegeben wird, werden die angegebenen Funktionen für alle Browsing-Kontexte deaktiviert (das schließt alle <iframe>s ein), unabhängig von ihrem Ursprung.
Kombination von HTTP-Header und <iframe>-Richtlinien
Zum Beispiel, nehmen wir an, wir wollten die Nutzung von Geolocation auf unserem eigenen Ursprung und in eingebettetem Inhalt von unserem vertrauenswürdigen Ad-Netzwerk zulassen. Wir könnten die seitenweite Permissions-Policy wie folgt 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 festlegen:
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>
Wenn ein anderer Ursprung in das <iframe> geladen wird, hätte er keinen Zugriff auf Geolocation:
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>
Berichte über Verstöße
Dieses Beispiel zeigt, wie das Reporting von Permissions-Policy-Verstößen an einen Serverendpunkt konfiguriert werden kann.
Die untenstehenden Antwort-Header blockieren Geolocation und definieren den Bericht-Endpunktnamen für die Funktion als "geo_endpoint".
Der Reporting-Endpoints HTTP-Antwort-Header 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 Berichtsverletzungen an den gleichen Endpunkt zu senden, könnten wir stattdessen den "default" Berichts-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, zum Beispiel:
navigator.geolocation.getCurrentPosition(
() => {},
() => {},
);
Die Berichts-Nutzdaten, die an den Endpunkt gesendet werden, könnten 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:
Chromes serverseitige Serialisierung von Verstoßberichten verwendet policyId anstelle von featureId für den Funktionsnamen im body eines Serverberichts.
Der von einem ReportingObserver zurückgegebene PermissionsPolicyViolationReport folgt der Spezifikation.
Spezifikationen
| Spezifikation |
|---|
| Permissions Policy> # permissions-policy-http-header-field> |