Permissions Policy für Shopware 6

Browser-APIs einschränken per EventSubscriber — Kamera, Mikrofon und Geolocation sperren, Payment Request API für den Checkout erlauben.

Shopware · Schritt für Schritt

Permissions Policy in Shopware 6

Permissions Policy kontrolliert, welche Browser-APIs Ihre Website und eingebettete Inhalte nutzen dürfen. Für Shopware-Shops besonders relevant: Die payment-Direktive steuert den Zugriff auf die Payment Request API. Permissions Policy ist mit 10 von 166 Punkten im Wolf-Agents Web Security Check bewertet.

Shopware bietet keine native shopware.yaml-Option für Permissions Policy. Die Konfiguration erfolgt über einen EventSubscriber. Bei Self-Hosted-Installationen können Sie den Header alternativ auf Server-Ebene (Nginx/Apache) setzen.

Implementierung

Variante A (empfohlen): EventSubscriber im Custom Plugin. Variante B: Nginx-Konfiguration für Self-Hosted-Setups.

Variante A — EventSubscriber
SecurityHeaderSubscriber.php Empfohlen
// SecurityHeaderSubscriber.php — Permissions Policy
public function onResponse(ResponseEvent $event): void
{
    $response = $event->getResponse();

    // Permissions Policy — Browser-APIs einschränken
    $response->headers->set('Permissions-Policy', implode(', ', [
        'camera=()',
        'microphone=()',
        'geolocation=()',
        'usb=()',
        'bluetooth=()',
        'midi=()',
        // Payment Request API — nur für Payment-Provider
        'payment=(self "https://js.stripe.com" "https://www.paypal.com")',
    ]));
}
Variante B — Nginx (Self-Hosted)
nginx.conf Server-Level
# Nginx — Alternative für Self-Hosted
add_header Permissions-Policy
  "camera=(), microphone=(), geolocation=(), usb=(), bluetooth=(), midi=(), payment=(self)"
  always;
Payment Request API im Checkout

Wenn Ihr Shop die Payment Request API (Apple Pay, Google Pay) nutzt, muss payment=(self) gesetzt sein. Ohne diese Ausnahme funktioniert der Express-Checkout nicht. Stripe und PayPal benötigen ggf. zusätzliche Origins.

Verifizierung

Prüfen Sie den Header nach dem Cache-Leeren.

Terminal Verifizierung
# Cache leeren
bin/console cache:clear

# Permissions-Policy-Header prüfen
curl -sI https://ihr-shop.de | grep -i permissions-policy

# Erwartete Ausgabe:
# permissions-policy: camera=(), microphone=(), geolocation=()

Häufige Fehler

Payment blockiert durch leere payment-Direktive

payment=() blockiert die Payment Request API komplett. Wenn Ihr Shop Apple Pay oder Google Pay nutzt, muss mindestens payment=(self) gesetzt sein.

Plugin setzt eigene Header die überschrieben werden

Prüfen Sie ob andere Plugins bereits einen Permissions-Policy-Header setzen. Mehrere Header überschreiben sich gegenseitig. Konsolidieren Sie alle Policies in einem EventSubscriber.

Nginx und EventSubscriber setzen doppelte Header

Wenn sowohl Nginx als auch der EventSubscriber den Header setzen, erscheinen zwei Permissions-Policy-Header. Browser verwenden nur den ersten. Entscheiden Sie sich für einen Weg.

Compliance-Relevanz

NIS2Art. 21(e) — Minimierung der Angriffsfläche durch Deaktivierung ungenutzter Browser-APIs
DSGVOArt. 25 — Privacy by Design: Kamera und Mikrofon standardmäßig deaktivieren
BSIAPP.3.1 — Prinzip der minimalen Rechte auf Browser-API-Ebene

Wie steht Ihre Domain bei Permissions Policy?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.