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.
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.
// 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")',
]));
} # Nginx — Alternative für Self-Hosted
add_header Permissions-Policy
"camera=(), microphone=(), geolocation=(), usb=(), bluetooth=(), midi=(), payment=(self)"
always; 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.
# 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
Wie steht Ihre Domain bei Permissions Policy?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.