HTTP Permissions-Policy Header

Typ

Der Permissions-Policy HTTP-Response-Header definiert, welche Browser-Features ein Dokument und dessen eingebettete Frames verwenden dürfen.

Syntax

Der Header verwendet eine strukturierte Direktiven-Syntax mit Feature-Namen und Allowlists.

http
Permissions-Policy: feature-name=(allowlist)
Permissions-Policy: feature-name=*, other-feature=(self "https://example.com")
Permissions-Policy: geolocation=(), camera=(self), microphone=(self "https://trusted.com")

Direktiven

Jede Direktive besteht aus einem Feature-Namen und einer Allowlist in Klammern. Mehrere Direktiven werden durch Komma getrennt.

allowlist-Werte
Definiert erlaubte Ursprünge für das Feature. Mögliche Werte: * (alle Ursprünge), self (gleicher Ursprung), "https://origin.com" (spezifischer Ursprung), () (Feature deaktiviert).
feature-name
Name der zu kontrollierenden Browser-API. Beispiele: geolocation, camera, microphone, payment, usb. Über 35 Features werden unterstützt.

Beispiele

Die folgenden Beispiele zeigen typische Anwendungsfälle für API-basierte Architekturen und eingebettete Inhalte.

API-Endpunkt mit restriktiver Feature-Policy

Ein REST-API-Endpunkt deaktiviert alle gerätebezogenen Features für maximale Sicherheit.

http
HTTP/1.1 200 OK
Content-Type: application/json
Permissions-Policy: geolocation=(), camera=(), microphone=(), usb=(), bluetooth=()
Permissions-Policy: payment=(), autoplay=()

{
  "status": "success",
  "data": []
}

SPA mit selektiver Feature-Freigabe

Eine Single-Page-Application erlaubt Camera-Zugriff für eigenen Ursprung, aber nicht für eingebettete iFrames.

http
HTTP/1.1 200 OK
Content-Type: text/html
Permissions-Policy: camera=(self), microphone=(self), geolocation=(self)
Permissions-Policy: payment=(), usb=(), bluetooth=()

<!DOCTYPE html>
<html>
<head><title>Video Chat App</title></head>
<body>...</body>
</html>

Embedding-Plattform mit Trusted Third-Party

Eine Plattform erlaubt einem vertrauenswürdigen Zahlungsdienstleister Zugriff auf Payment Request API.

http
HTTP/1.1 200 OK
Content-Type: text/html
Permissions-Policy: payment=(self "https://payment.stripe.com")
Permissions-Policy: geolocation=(), camera=(), microphone=()
Permissions-Policy: usb=(), bluetooth=(), serial=()

<!DOCTYPE html>
<html>
<head><title>Checkout</title></head>
<body>
  <iframe src="https://payment.stripe.com/checkout"></iframe>
</body>
</html>

Vorteile für die Systemarchitektur

  • Reduziert Angriffsfläche durch Deaktivierung ungenutzter Browser-APIs
  • Verhindert unerwünschten Feature-Zugriff durch eingebettete Drittanbieter-Inhalte
  • Ermöglicht granulare Kontrolle über Hardware-API-Zugriff pro Ursprung
  • Schützt vor Feature-Policy-Injection in iFrames durch explizite Allowlists
  • Unterstützt Defense-in-Depth-Strategie für moderne Web-Anwendungen

Spezifikation

Definiert in der W3C Permissions Policy Spezifikation. Ersetzt den veralteten Feature-Policy Header. Browser-Support variiert je Feature.

Weitere Spezifikationen

Content-Security-Policy Header, Cross-Origin-Embedder-Policy Header, Cross-Origin-Opener-Policy Header