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 Response-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 unter Verwendung der Reporting API gemeldet werden. Berichte werden automatisch an den Server-Endpunkt namens "default" gesendet, wenn dieser in einem Reporting-Endpoints HTTP-Response-Header definiert ist. 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 weitere Details sind in PermissionsPolicyViolationReport beschrieben.
Für weitere Informationen, sehen Sie den Hauptartikel zur Permissions Policy.
| Headertyp | Response-Header |
|---|
Syntax
Permissions-Policy: <directive>=<allowlist>
<directive>-
Die Permissions-Policy-Direktive, auf die die
allowlistangewandt werden soll. Siehe unten Direktiven 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 enthalten und durch Leerzeichen getrennt sind:
*(Wildcard)-
Die Funktion wird in diesem Dokument und in 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) mit demselben Ursprung erlaubt. Die Funktion ist in Fremd-Ursprung-Dokumenten in geschachtelten Browsing-Kontexten nicht erlaubt.selfkann als Kurzform 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 hinein geladene Dokument aus demselben Ursprung stammt wie die URL in seinem src-Attribut. Dieser Wert wird nur im<iframe>-allow-Attribut verwendet und ist der Standardallowlist-Wert in<iframe>s. "<origin>"-
Die Funktion ist für spezifische 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 stehen.
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 eine von
*,selfodernonefür denPermissions-PolicyHTTP-Header ist und das Standardverhalten regelt, wenn sie nicht explizit in einer Richtlinie aufgeführt sind. Diese sind auf den einzelnen Direktivreferenzseiten spezifiziert. 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 Sie nicht mehrere verschiedene Subdomains explizit in einer Allowlist angeben müssen, sondern alle in einem einzelnen 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 spezifizieren:
("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 das
Accelerometer-Interface sammeln darf. ambient-light-sensorExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Lichtmenge in der Umgebung des Geräts über das
AmbientLightSensor-Interface sammeln darf. aria-notifyExperimentell-
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 automatisch abspielen darf, welche über das
HTMLMediaElement-Interface angefordert werden. Wenn diese Richtlinie deaktiviert ist und keine Nutzerinteraktionen stattgefunden haben, wird das vonHTMLMediaElement.play()zurückgegebenePromisemit einemNotAllowedError-DOMExceptionzurückgewiesen. Das Autoplay-Attribut bei<audio>und<video>-Elementen wird ignoriert. bluetoothExperimentell-
Steuert, ob die Nutzung der Web Bluetooth API erlaubt ist. Wenn diese Richtlinie deaktiviert ist, werden die Methoden des
Bluetooth-Objekts, das vonNavigator.bluetoothzurückgegeben wird, entwederfalsezurückgeben oder das zurückgegebenePromisemit einemSecurityError-DOMExceptionzurückweisen. browsing-topicsVeraltet Nicht standardisiert-
Steuert den Zugriff auf die Topics API. Wo eine Richtlinie die Verwendung der Topics API ausdrücklich untersagt, werden alle Versuche, die Methode
Document.browsingTopics()aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics-Header zu senden, mit einemNotAllowedError-DOMExceptionfehlschlagen. cameraExperimentell-
Steuert, ob das aktuelle Dokument Videoeingabegeräte verwenden darf. Das von
getUserMedia()zurückgegebenePromisewird mit einemNotAllowedError-DOMExceptionzurückgewiesen, 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-DOMExceptionzurückgewiesen, wenn die Berechtigung nicht erlaubt ist. ch-ua-high-entropy-valuesExperimentell-
Steuert, ob das Dokument die Methode
NavigatorUAData.getHighEntropyValues()verwenden darf, um hoch-Genauigkeits-Benutzeragenten-Daten abzurufen. Wenn die Berechtigung nicht erlaubt ist, wird die Methode nur diebrands,mobileundplatformniedrig-Genauigkeit-Daten zurückgeben. 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. display-captureExperimentell-
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 einemNotAllowedError-DOMExceptionzurückgewiesen, wenn keine Erlaubnis zur Erfassung der Bildschirm-Inhalte erteilt wurde. 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 einemSecurityError-DOMExceptionzurückgewiesen. fullscreenExperimentell-
Steuert, ob das aktuelle Dokument
Element.requestFullscreen()verwenden darf. Wenn diese Richtlinie deaktiviert ist, lehnt das zurückgegebenePromisemit einemTypeErrorab. gamepadExperimentell-
Steuert, ob das aktuelle Dokument die Gamepad API verwenden darf. Wenn diese Richtlinie deaktiviert ist, werden Anrufe an
Navigator.getGamepads()einenSecurityError-DOMExceptionauslösen, und die Ereignissegamepadconnectedundgamepaddisconnectedwerden nicht ausgelöst. geolocationExperimentell-
Steuert, ob das aktuelle Dokument die
Geolocation-Oberfläche verwenden darf. Wenn diese Richtlinie deaktiviert ist, führen Anrufe angetCurrentPosition()undwatchPosition()dazu, dass die Rückruf-Funktionen dieser Funktionen mit einemGeolocationPositionErrorCode vonPERMISSION_DENIEDaufgerufen werden. gyroscopeExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über das
Gyroscope-Interface sammeln darf. hidExperimentell-
Steuert, ob das aktuelle Dokument die WebHID API verwenden darf, um eine Verbindung zu ungewöhnlichen oder exotischen Eingabegeräten wie alternativen Tastaturen oder Gamepads herzustellen.
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 "verfügbar"/"abwesend"-Status 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 auf dem Benutzercomputer installierten Schriftarten über die
Window.queryLocalFonts()-Methode sammeln darf (siehe auch die Local Font Access API). magnetometerExperimentell-
Steuert, ob das aktuelle Dokument Informationen über die Ausrichtung des Geräts über das
Magnetometer-Interface sammeln darf. microphoneExperimentell-
Steuert, ob das aktuelle Dokument Audio-Eingabegeräte verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
MediaDevices.getUserMedia()zurückgegebenePromisemit einemNotAllowedError-DOMExceptionzurückgewiesen. midiExperimentell-
Steuert, ob das aktuelle Dokument die Web MIDI API verwenden darf. Wenn diese Richtlinie deaktiviert ist, wird das von
Navigator.requestMIDIAccess()zurückgegebenePromisemit einemSecurityError-DOMExceptionzurückgewiesen. on-device-speech-recognitionExperimentell-
Steuert den Zugriff auf die on-device speech recognition-Funktionalität der Web Speech API.
otp-credentialsExperimentell-
Steuert, ob das aktuelle Dokument die WebOTP API verwenden darf, um ein Einmalpasswort (OTP) von einer speziell formatierten SMS-Nachricht anzufordern, die von dem Server der App gesendet wird, wie zum Beispiel über
navigator.credentials.get({otp: ..., ...}). paymentExperimentell-
Steuert, ob das aktuelle Dokument die Payment Request API verwenden darf. Wenn diese Richtlinie aktiviert ist, wird der
PaymentRequest()-Konstruktor einenSecurityError-DOMExceptionauslösen. picture-in-pictureExperimentell-
Steuert, ob das aktuelle Dokument ein Video im Picture-in-Picture-Modus über die entsprechende API abspielen darf.
private-state-token-issuanceExperimentell-
Steuert die Nutzung von private state token-
token-request-Operationen. private-state-token-redemptionExperimentell-
Steuert die Nutzung von private state token-
token-redemption- undsend-redemption-record-Operationen. publickey-credentials-createExperimentell-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um neue asymmetrischen Schlüsselanmeldeinformationen zu erstellen, zum Beispiel über
navigator.credentials.create({publicKey: ..., ...}). publickey-credentials-getExperimentell-
Steuert, ob das aktuelle Dokument die Web Authentication API verwenden darf, um bereits gespeicherte Public-Key-Anmeldeinformationen abzurufen, zum Beispiel ü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 abdunkeln soll.
serialExperimentell-
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-selectionExperimentell-
Steuert, ob das aktuelle Dokument die Audio Output Devices API verwenden darf, um Lautsprecher zu listen und auszuwählen.
storage-accessExperimentell-
Steuert, ob ein in einem Drittanbieter-Kontext geladenes Dokument (d.h. eingebettet in ein
<iframe>) die Storage Access API verwenden darf, um Zugang zu nicht partitionierten 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 nach 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 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 Nutzung
Permissions-Policy-Header
Um allen Ursprüngen Zugriff auf die Geolokalisierung zu erlauben, würden Sie dies tun:
Permissions-Policy: geolocation=*
Oder um den Zugriff auf eine Auswahl 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 kontrolliert werden, indem der Header mit einer durch Kommata getrennten Liste von Richtlinien gesendet wird, oder indem für jede Richtlinie ein separater Header 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 auch der erlaubte Ursprung in der Allowlist für die übergeordnete Seite enthalten sein. Aufgrund dieses Vererbungsverhaltens ist es eine gute Idee, die weitestgehende akzeptable Unterstützung für eine Funktion im HTTP-Header anzugeben und dann die Teilmenge der Unterstützung, die Sie in jedem <iframe> benötigen, zu spezifizieren.
Um allen Ursprüngen Zugriff auf die Geolokalisierung 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>
Das ist wichtig: 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, zu dem das <iframe> navigiert, im allow-Attribut auflisten, wird die Permissions-Policy, die auf das ursprüngliche <iframe> angewendet wurde, auch auf den Ursprung angewendet, zu dem das <iframe> navigiert.
Mehrere Funktionen können gleichzeitig kontrolliert 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 wert, dem src-Wert besondere Erwähnung zu geben. Wir haben oben erwähnt, dass die Verwendung dieses Allowlist-Wertes bedeutet, dass die zugehörige Funktion in diesem <iframe> erlaubt wird, solange das hineingeladene Dokument aus demselben Ursprung stammt wie die URL in seinem src-Attribut. Dieser Wert ist der Standard allowlist-Wert für in allow aufgeführte Funktionen, 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 APIs für Mikrofon (zum Beispiel MediaDevices.getUserMedia()) und Geolocation in seiner Anwendung deaktivieren. Es kann dies mit dem folgenden Response-Header tun:
Permissions-Policy: microphone=(), geolocation=()
Indem () für die Ursprungs-Liste angegeben wird, werden die angegebenen Funktionen für alle Browsing-Kontexte deaktiviert (dies schließt alle <iframe>s ein), unabhängig von ihrem Ursprung.
Kombination von HTTP-Header- und <iframe>-Richtlinien
Lassen Sie uns zum Beispiel sagen, dass wir die Nutzung der Geolokalisierung auf unserem eigenen Ursprung und in eingebetteten Inhalten von unserem vertrauenswürdigen Werbenetzwerk aktivieren möchten. Wir könnten die seitenweite Permissions-Policy so einrichten:
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)
In unseren Ad-<iframe>s könnten wir den Zugriff auf den https://trusted-ad-network.com-Ursprung so einstellen:
<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 Geolokalisierung:
<iframe src="https://rogue-origin-example.com" allow="geolocation"></iframe>
Verletzungen melden
Dieses Beispiel zeigt, wie die Meldung von Verletzungen der Permissions-Policy an einen Server-Endpunkt konfiguriert wird.
Die untenstehenden Response-Header blockieren die Geolokalisierung und definieren einen "default"-Meldung-Endpunkt unter Verwendung des Reporting-Endpoints HTTP-Response-Headers. Berichte über Verletzungen der Permissions-Policy werden automatisch an diesen Endpunkt gesendet.
Reporting-Endpoints: default="https://example.com/reports"
Permissions-Policy: geolocation=()
Eine Verletzung tritt auf, wenn eine Seite versucht, die blockierte Funktion zu verwenden, zum Beispiel:
navigator.geolocation.getCurrentPosition(
() => {},
() => {},
);
Die an den Endpunkt gesendete Berichtsnutzlast könnte so 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:
Chrome's serverseitige Serialisierung von Verletzungsberichten verwendet policyId anstelle von featureId als Funktionsnamen im body eines Serverberichts.
Das von einem ReportingObserver zurückgegebene PermissionsPolicyViolationReport folgt der Spezifikation.
Spezifikationen
| Spezifikation |
|---|
| Permissions Policy> # permissions-policy-http-header-field> |