Zum Hauptinhalt springen

Was ist die Permissions-Policy?

Der HTTP-Header, mit dem du dem Browser sagst: "Auf meiner Webseite darfst du Mikrofon, Kamera, Geolocation und Konsorten gar nicht erst nutzen."

Das Problem: zu viele Browser-Features

Moderne Browser können viel: Geolocation abfragen, Mikrofon/Kamera nutzen, Bewegungssensoren auslesen, USB- und Bluetooth-Geräte ansprechen, FLoC-Tracking-Kohorten setzen, vibrieren, Vollbild umschalten. Standardmäßig sind diese Features verfügbar — wenn ein eingebettetes iframe oder ein Drittanbieter-Skript darauf zugreift, fragt der Browser im besten Fall den Nutzer (z. B. "Mikrofon erlauben?"), im schlechtesten Fall (FLoC) nicht einmal das.

Mit der Permissions-Policy (früher Feature-Policy genannt) kannst du diese Features zentral abschalten. Selbst wenn ein eingebettetes iframe oder ein Skript versucht, das Mikrofon zu öffnen, blockt der Browser das ohne Rückfrage. Reduziert die Angriffsfläche und ist eine wichtige Privacy-Stellschraube.

Aufbau des Headers

Allgemeine Form:

Permissions-Policy: feature1=(allowlist), feature2=(allowlist), ...

Die Allowlist kann sein:

  • () — leer, niemand darf das Feature nutzen.
  • (self) — nur die eigene Origin, nicht eingebettete iframes.
  • (self "https://partner.de") — eigene Origin und genau eine fremde.
  • (*) — alle Origins. Nicht empfohlen.

Empfohlener Default für die meisten Webseiten

Permissions-Policy:
  geolocation=(),
  camera=(),
  microphone=(),
  payment=(),
  usb=(),
  bluetooth=(),
  magnetometer=(),
  gyroscope=(),
  accelerometer=(),
  midi=(),
  xr-spatial-tracking=(),
  interest-cohort=()

Damit sind alle exotischen und privacy-sensiblen Features komplett gesperrt. Browser, die die Direktiven nicht kennen, ignorieren sie still — kein Risiko durch unbekannte Werte.

Die wichtigsten Features

  • geolocation — GPS-/Standort-API.
  • camera, microphone — getUserMedia.
  • payment — Payment Request API (Apple Pay, Google Pay).
  • usb, bluetooth — direkter Hardware-Zugriff.
  • magnetometer, gyroscope, accelerometer — Bewegungs-/Lagesensoren (Privacy-relevant: lassen sich für Fingerprinting missbrauchen).
  • midi — MIDI-Hardware (kaum gebraucht, aber Default-aktiv).
  • interest-cohort — Googles FLoC-Tracking. Mit () opt-out.
  • autoplay — automatische Wiedergabe von Video/Audio.
  • fullscreen — request to fullscreen.
  • picture-in-picture — Picture-in-Picture-Modus.
  • clipboard-read, clipboard-write — Zugriff auf die Zwischenablage.

Wann ein Feature freischalten?

Wenn deine Webseite ein Feature wirklich braucht — etwa Geolocation für einen Filialen-Finder oder Kamera für ein QR-Code-Tool — schalte nur die eigene Origin frei: geolocation=(self). Damit verhinderst du, dass eingebettete Drittseiten den Zugriff bekommen.

Konfigurationsbeispiele

nginx (kompakt):

add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=(), usb=(), bluetooth=(), magnetometer=(), gyroscope=(), accelerometer=(), midi=(), interest-cohort=()" always;

Apache:

Header always set Permissions-Policy "geolocation=(), camera=(), microphone=(), ..."

Browser-Support

Chrome, Edge und Opera verstehen Permissions-Policy seit ~2021 vollständig. Firefox akzeptiert die Header-Direktiven zum Teil, lehnt aber das Übersteuern von Features in iframes per allow=...-Attribut anders ab. Safari kommt schrittweise nach. Da der Header ignoriert wird, wenn er nicht verstanden wird, ist das Setzen risikofrei — auch wenn der Schutz dann eben nur in einem Teil der Browser greift.

Selbst prüfen: HTTP-Header

HSTS, CSP, X-Frame-Options & Co. Gib eine Domain ein und sieh in Sekunden, wie es um deinen PERMISSIONS-POLICY steht.

Auch im Lexikon