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.
Verstöße gegen eine Richtlinie können über die Reporting API gemeldet werden.
Berichte können an einen Server gesendet werden, der im report-to-Parameter pro Richtlinie benannt ist, oder andernfalls an den Server-Endpunkt, der als "default" benannt ist (die Zuordnung zwischen Server-Endpunktnamen und URLs wird mithilfe des Reporting-Endpoints HTTP Antwort-Headers festgelegt).
Berichte können auch in der Seite, für die die Richtlinie durchgesetzt wird, mit einem ReportingObserver beobachtet werden.
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 Zulassungslisten für eine oder mehrere Direktiven festzulegen und optional einen report-to-Parameter pro Direktive anzugeben, der den Server-Endpunkt angibt, an den Berichte über Richtlinienverstöße gesendet werden sollen.
Die Einträge für jede Direktive sind durch Kommata getrennt.
<directive>-
Die Permissions Policy-Direktive, auf die die
allowlistangewendet werden soll. Siehe Direktiven unten für eine Liste der erlaubten Direktivnamen. <allowlist>-
Eine Zulassungsliste ist eine Liste von Ursprüngen, die einen oder mehrere der folgenden Werte enthält, eingeschlossen in Klammern und durch Leerzeichen getrennt:
*(Wildcard)-
Die Funktion wird in diesem Dokument und allen geschachtelten Browsing-Kontexten (
<iframe>s) unabhängig von ihrem Ursprung erlaubt. ()(leere Zulassungsliste)-
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 selben Ursprung erlaubt. Die Funktion ist in Dokumenten mit Ursprüngen 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 in seinem src-Attribut stammt. Dieser Wert wird nur im<iframe>-allow-Attribut verwendet und ist der Standardwert für dieallowlistin<iframe>s. "<origin>"-
Die Funktion ist für spezifische 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 stehen.
Die Werte
*und()dürfen nur alleine verwendet werden, währendselfundsrcin Kombination mit einem oder mehreren Ursprüngen verwendet werden können.Hinweis: Direktiven haben eine Standard-Zulassungsliste, die immer eines von
*,selfodernonefür denPermissions-Policy-HTTP-Header ist und das Standardverhalten bestimmt, wenn sie nicht explizit in einer Richtlinie aufgeführt werden. Diese sind auf den einzelnen Richtlinienverweisseiten 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 Berichterstattungsendpunkts anzugeben, an den Berichte gesendet werden, wenn es einen Richtlinienverstoß für die zugehörige Direktive gibt. Der Endpunktname und die zugehörige URL müssen in einem separatenReporting-EndpointsHTTP-Antwort-Header angegeben werden.Wird er weggelassen, werden Berichte an den
default-Berichterstattungsendpunkt gesendet, wenn einer definiert wurde. Weitere Informationen finden Sie in der Reporting API.
Wo unterstützt, können Sie Wildcards in den Ursprüngen der Permissions Policy einschließen. Das bedeutet, dass Sie anstelle der expliziten Angabe mehrerer verschiedener Subdomains in einer Zulassungsliste, diese alle in einem einzelnen Ursprung 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 dies 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 Lichtmenge in der Umgebung des Geräts über die
AmbientLightSensor-Schnittstelle 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 über die
HTMLMediaElement-Schnittstelle automatisch abspielen darf. Wenn diese Richtlinie deaktiviert ist und keine Benutzeraktionen durchgeführt wurden, wird das vonHTMLMediaElement.play()zurückgegebenePromisemit einemNotAllowedErrorDOMExceptionzurückgewiesen. Dasautoplay-Attribut bei<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 Nutzung der Topics API ausdrücklich nicht erlaubt, schlägt jeder Versuch, die
Document.browsingTopics()-Methode aufzurufen oder eine Anfrage mit einemSec-Browsing-Topics-Header zu senden, mit einemNotAllowedErrorDOMExceptionfehl. cameraExperimentell-
Steuert, ob das aktuelle Dokument Videoeingabegeräte verwenden darf. Das von
getUserMedia()zurückgegebenePromisewird mit einemNotAllowedErrorDOMExceptionabgelehnt, wenn die Erlaubnis nicht erteilt wurde. 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
NotAllowedErrorDOMExceptionabgelehnt, wenn die Erlaubnis nicht erteilt wurde. ch-ua-high-entropy-valuesExperimentell-
Steuert, ob das Dokument die
NavigatorUAData.getHighEntropyValues()-Methode verwenden darf, um hochentropische User-Agent-Daten abzurufen. Wenn die Erlaubnis nicht erteilt wird, gibt die Methode nur die niederentropischen Datenbrands,mobileundplatformzurück. 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 freigegebenen, ursprungübergreifenden Subframe-Quotas für
fetchLater(). display-captureExperimentell-
Steuert, ob das aktuelle Dokument die
getDisplayMedia()-Methode zur Erfassung von Bildschirminhalten verwenden darf. Wenn diese Richtlinie deaktiviert ist, lehnt das vongetDisplayMedia()zurückgegebene Promise mit einemNotAllowedErrorDOMExceptionab, wenn keine Erlaubnis zur Erfassung der Bildschirm-Anzeige erhalten wird. 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 einemSecurityErrorDOMExceptionzurückgewiesen. 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, führen Aufrufe von
Navigator.getGamepads()zu einemSecurityErrorDOMException, und diegamepadconnected- undgamepaddisconnected-Events werden 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ückruffunktionen dieser Funktionen mit einemGeolocationPositionError-Code vonPERMISSION_DENIEDaufgerufen werden. gyroscopeExperimentell-
Steuert, ob das aktuelle Dokument Informationen zur Orientierung des Geräts über die
Gyroscope-Schnittstelle sammeln darf. hidExperimentell-
Steuert, ob das aktuelle Dokument die Verwendung der WebHID API zum Verbinden mit ungewöhnlichen oder exotischen Mensch-Maschine-Schnittstellengeräten wie alternativen Tastaturen oder Gamepads erlaubt ist.
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, um beispielsweise den Status "verfügbar"/"abwesend" in Chat-Anwendungen anzugeben.
language-detectorExperimentell-
Steuert den Zugriff auf die Sprachenerkennungsfunktionalität der Translator and Language Detector APIs.
local-fontsExperimentell-
Steuert, ob das aktuelle Dokument Daten über auf dem Benutzer lokal installierte Schriftarten über die
Window.queryLocalFonts()-Methode sammeln darf (siehe auch die Local Font Access API). magnetometerExperimentell-
Steuert, ob das aktuelle Dokument Informationen zur Orientierung 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 einemSecurityErrorDOMExceptionzurückgewiesen. on-device-speech-recognitionExperimentell-
Steuert den Zugriff auf die Funktionalität zur Spracherkennung auf dem Gerät 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, 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 eineSecurityErrorDOMExceptionaus. 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 Private State Token-
token-request-Operationen. private-state-token-redemptionExperimentell-
Steuert die Verwendung 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 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 darf, 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 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, die entweder direkt über einen seriellen Port angeschlossen sind oder über USB- oder Bluetooth-Geräte, die einen seriellen Port emulieren.
speaker-selectionExperimentell-
Steuert, ob das aktuelle Dokument die Audio-Ausgabegeräte-API verwenden darf, um Lautsprecher aufzulisten und auszuwählen.
storage-accessExperimentell-
Steuert, ob ein in einem Drittanbieter-Kontext geladenes Dokument (d.h. eingebettet in einem
<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()-Methode der Web Share API verwenden darf, um Text, Links, Bilder und andere Inhalte zu beliebigen Zielen 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 Anzeigen 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 Geolocation zu gewähren, 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 kommagetrennten Liste von Richtlinien gesendet oder 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 Zulassungsliste 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 das Untermenge an Unterstützung, die Sie in jedem <iframe> benötigen, anzugeben.
Um allen Ursprüngen Zugriff auf Geolocation zu gewähren, würden Sie dies tun:
<iframe src="proxy.php?url=https%3A%2F%2Fexample.com" allow="geolocation *"></iframe>
Um eine Richtlinie auf den aktuellen Ursprung und andere anzuwenden, würden Sie dies tun:
<iframe
src="proxy.php?url=https%3A%2F%2Fexample.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. Durch die Auflistung des Ursprungs, zu dem das <iframe> im allow-Attribut navigiert, 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 Semikolons getrennte Liste von Richtliniendirektiven im allow-Attribut angegeben wird.
<iframe
src="proxy.php?url=https%3A%2F%2Fexample.com"
allow="geolocation 'self' https://a.example.com https://b.example.com; fullscreen 'none'"></iframe>
Es ist erwähnenswert, dem src-Wert besondere Aufmerksamkeit zu schenken. Wir haben oben erwähnt, dass die Verwendung dieses Zulassungslistenwerts bedeutet, dass die zugehörige Funktion in diesem <iframe> erlaubt ist, solange das darin geladene Dokument aus demselben Ursprung wie die URL in seinem src-Attribut stammt. Dieser Wert ist der Standardallowlist-Wert für Funktionen, die in allow aufgeführt sind, sodass die folgenden gleichwertig sind:
<iframe src="proxy.php?url=https%3A%2F%2Fexample.com" allow="geolocation 'src'"></iframe>
<iframe src="proxy.php?url=https%3A%2F%2Fexample.com" allow="geolocation"></iframe>
Zugriff auf leistungsstarke Funktionen verweigern
SecureCorp Inc. möchte die Microphone-Funktion (zum Beispiel MediaDevices.getUserMedia()) und die Geolocation-APIs in seiner Anwendung deaktivieren. Es kann dies mit dem folgenden Antwort-Header tun:
Permissions-Policy: microphone=(), geolocation=()
Durch Angabe von () für die Ursprungs-Liste 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
Zum Beispiel, nehmen wir an, wir möchten die Nutzung von Geolocation auf unserem eigenen Ursprung und in eingebetteten Inhalten unseres vertrauenswürdigen Werbenetzwerkes ermöglichen. Wir könnten die seitenweite Permissions Policy folgendermaßen 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 wie folgt festlegen:
<iframe src="proxy.php?url=https%3A%2F%2Ftrusted-ad-network.com" allow="geolocation"></iframe>
Wenn ein anderer Ursprung in <iframe> geladen wird, hätte er keinen Zugriff auf die Geolocation:
<iframe src="proxy.php?url=https%3A%2F%2Frogue-origin-example.com" allow="geolocation"></iframe>
Berichten von Verstößen
Dieses Beispiel zeigt, wie die Berichterstattung von Permissions-Policy-Verstößen an einen Server-Endpunkt konfiguriert wird.
Die unten stehenden Antwort-Header blockieren die Geolocation und definieren den Namen des Berichterstattungs-Endpunkts 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 Verletzungsberichte an denselben Endpunkt zu senden, könnten wir stattdessen den "default"-Berichterstattungsendpunkt definieren:
Reporting-Endpoints: default="https://example.com/reports"
Permissions-Policy: geolocation=()
Ein Verstoß tritt auf, wenn eine Seite versucht, die gesperrte Funktion zu verwenden, zum Beispiel:
navigator.geolocation.getCurrentPosition(
() => {},
() => {},
);
Die an den Endpunkt gesendete Reporte-Nutzlast 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:
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> |