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.