+49 (0) 9491 / 742 988 50

Permissions-Policy Header richtig konfigurieren

Was macht der Permissions-Policy Header?

Mit dem Permissions Policy Header kann die Benutzung von bestimmten Browser Features erlaubt oder verboten werden.

Was können die Auswirkungen eines nicht gesetzten Permissions-Policy Headers sein?

Der Header fungiert vor allem als eine Art zweite Verteidigungslinie: Falls es einem Hacker gelungen sein sollte, auf Ihrer Webseite Schadcode auszuführen (z.B. im Rahmen einer XSS Schwachstelle), dann kann er, bei nicht gesetztem Header, Features auf die der Browser zugreifen kann (z.B. Kamera oder Mikrofon) nutzen. Die Auswirkungen eines erfolgreichen Angriffs können somit noch deutlich umfangreicher ausfallen, da nicht nur die Integrität der Webseite und ihrer Daten betroffen ist, sondern auch ein massiver Eingriff in die Privatsphäre der User stattfindet.

Permissions-Policy Header

Bei einem gesetzten Permissions Policy Header kann der Hacker die blockierten Features dagegen nicht nutzen, was einen Angriff in seinen Auswirkungen zumindest begrenzt.

Gewissermaßen kann man sich den Permissions Policy Header also als Tresor vorstellen: Er kann zwar nicht verhindern, dass ein Einbrecher die Haustür aufbricht, aber zumindest dafür sorgen, dass er nicht so leicht an den Schmuck und das Bargeld kommt.

Anmerkung: Der Header ist nicht der alleinige Schutzmechanismus. Auch der Browser fragt vorher beim User an, ob dieser den Zugriff auf die Kamera, das Mikrofon oder den Standort (oder ein anderes Feature) gewähren möchte:

Der User muss dies also explizit bestätigen. Auch ohne Permissions Policy Header hat ein Hacker also keine Garantie darüber, dass Feature auch tatsächlich nutzen zu können. Dennoch ist es eine gute Praxis, zumindest den Zugang zu den mächtigen Features wie Kamera oder Mikrofon zu beschränken, wenn man sie auf der Seite nicht benötigt.

Welche Werte gibt es für den Permissions-Policy Header?

Die folgenden Features können von einer Webseite beim Browser angefragt werden:

  • accelerometer
    • Beschleunigung des Geräts auf dem die Webseite ausgeführt wird
  • ambient-light-sensor
    • Lichtverhältnisse in der Umgebung des Geräts auf dem die Webseite ausgeführt wird
  • autoplay
    • Automatisches Abspielen von Medien über das HTMLMediaElement Interface
  • battery
    • Zugriff auf die „Battery Status API“, mit der Informationen über den aktuellen Stand der Batterie abgerufen werden können
  • camera
    • Kamera des Geräts auf dem die Webseite ausgeführt wird
  • display-capture
    • Aufnahme von Screenshots
  • document-domain
    • Setzen von document.domain (Dieses Feature ist veraltet)
  • encrypted-media
    • Zugriff auf die „Encrypted Media Extensions API“
  • execution-while-not-rendered
    • Kontrolliert ob Aktionen auch in nicht gerenderten Frames (hidden) durchgeführt werden
  • execution-while-out-of-viewport
    • Kontrolliert ob Aktionen auch in Frames durchgeführt werden, die sich nicht im aktuellen Blickfeld befinden (z.B. weiter unten auf einer Webseite)
  • fullscreen
    • Kontrolliert ob ein Element in Vollbild Ansicht dargestellt werden kann
  • gamepad
    • Kontrolliert den Zugriff auf den „Gamepad API“
  • geolocation
    • Zugriff auf den Standort
  • gyroscope
    • Lage des Geräts auf dem die Webseite ausgeführt wird
  • hid
    • Zugriff auf die „WebHID API“ die die Verbindung mit externen Geräten (Tastaturen, Gamepads etc.) kontrolliert
  • idle-detection
    • Zugriff auf die „Idle Detection API“ mit der geprüft werden kann, ob User momentan mit ihrem Gerät interagieren oder nicht
  • local-fonts
    • Zugriff auf die vom User lokal installierten Schriftarten
  • magnetometer
    • Informationen über die Orientierung des Geräts
  • microphone
    • Zugriff auf das Mikrofon
  • midi
    • Zugriff auf die „Web MIDI API“, diese ist zur Interaktion mit Musical Instrument Digital Interface (MIDI) Geräten vorgesehen
  • payment
    • Zugriff auf die „Payment Request API“, die das Austauschen von Zahlungsinformationen ermöglicht
  • picture-in-picture
    • Abspielen von Videos im „Bild im Bild“ Modus
  • publickey-credentials-get
    • Zugriff auf die „Web Authentication API“ mit der auf gespeicherte Public Key Zugangsdaten zugegriffen werden kann
  • screen-wake-lock
    • Mit dieser Funktion kann eine Webseite angegeben, dass der Bildschirm nicht ausgeschaltet oder gedimmt werden soll
  • serial
    • Zugriff auf die „Web Serial API“ über die Serielle Schnittstellen genutzt werden können
  • speaker-selection
    • Zugriff auf die „Audio Output Devices API“, mit der verfügbare Lautsprecher angezeigt und ausgewählt werden können
  • usb
    • Zugriff auf die „WebUSB API“, mit der auf USB Geräte zugegriffen werden kann
  • web-share
    • Zugriff auf die „Webshare API“, mit der Texte, Links oder Bilder geteilt werden können
  • xr-spatial-tracking
    • Zugriff auf die „WebXR Device API“ für den Zugriff auf XR Sessions

 

Ein Feature (als Beispiel die Kamera) kann nun entweder:

  • Erlaubt werden: Permissions-Policy:  camera=*
  • Eingeschränkt erlaubt werden: Permissions-Policy:  camera=(self https://a.example.com)
    • Die Kamera ist auf der Subdomain a.example.com zulässig
  • Verboten werden: Permissions-Policy: camera=()

 

Mehrere Features können dabei durch Kommas getrennt werden:

  • Permissions-Policy: camera=(), microphone=(), geolocation=(), usb=*

Verbietet den Zugriff auf Kamera, Mikrofon und Standort, aber erlaubt den Zugriff auf USB Geräte

Auf welche Werte sollte der Permissions-Policy Header gesetzt sein?

Zunächst sollte man sich Gedanken darüber machen, welche Features man auf der Webseite benötigt. Ein Videokonferenz Anbieter braucht eben zwangsläufig den Zugriff auf Kamera und Mikrofon, ansonsten wäre sein Produkt nicht funktionsfähig. Bei einem Onlineshop dürfte es dagegen eher weniger Bedarf an diesen Features geben.

Features die benötigt werden, können dann explizit erlaubt werden ([feature]=*).

Bei nicht benötigten Features muss man abwägen: Im Idealfall würden man sie alle verbieten ([feature]=(), [feature]=(), …) allerdings werden dann die Requests recht umfangreich. Zudem dürften Features wie der Ladestand der Batterie für einen Angreifer auch nur von geringem Interesse sein, da das Missbrauchspotenzial in diesem Fall gering ist.

Falls nicht benötigt, sollten aber zumindest die mächtigen Features wie Kamera, Mikrofon und Standort deaktiviert werden, da diese zu massiven Privatsphäre Verletzungen führen können, wenn sie unter die Kontrolle eines Angreifers gelangen.