Clickjacking-Schutz für Shopware 6

X-Frame-Options per EventSubscriber — Administration mit DENY schützen, Storefront mit SAMEORIGIN absichern, Payment-iFrames berücksichtigen.

Shopware · Schritt für Schritt

Clickjacking-Schutz in Shopware 6

X-Frame-Options schützt vor Clickjacking-Angriffen, bei denen Ihre Seite in einem unsichtbaren iFrame eingebettet wird. X-Frame-Options ist mit 10 von 166 Punkten im Wolf-Agents Web Security Check bewertet. Der moderne Ersatz ist die frame-ancestors Direktive in der Content Security Policy.

In Shopware 6 ist die Konfiguration besonders relevant: Payment-Provider wie PayPal und Stripe betten eigene iFrames ein. Gleichzeitig muss die Administration vor Embedding geschützt werden. Ein kontextabhängiger EventSubscriber löst beide Anforderungen.

Implementierung

Variante A: EventSubscriber mit kontextabhängiger Konfiguration. Variante B: frame-ancestors in der CSP über shopware.yaml.

Variante A — EventSubscriber
SecurityHeaderSubscriber.php Empfohlen
// SecurityHeaderSubscriber.php — X-Frame-Options
public function onResponse(ResponseEvent $event): void
{
    $response = $event->getResponse();
    $request = $event->getRequest();

    // Administration: Kein Embedding erlaubt
    if (str_starts_with($request->getPathInfo(), '/admin')) {
        $response->headers->set('X-Frame-Options', 'DENY');
        return;
    }

    // Storefront: Nur Same-Origin Embedding
    $response->headers->set('X-Frame-Options', 'SAMEORIGIN');
}
Variante B — CSP frame-ancestors
config/packages/shopware.yaml CSP-basiert
# config/packages/shopware.yaml — frame-ancestors (moderner Ersatz)
shopware:
    security:
        csp_templates:
            default:
                frame-ancestors: "'none'"
            storefront:
                frame-ancestors: "'self'"
            administration:
                frame-ancestors: "'none'"
Payment-iFrames beachten

X-Frame-Options betrifft nur das Embedding Ihrer Seite in fremden iFrames. Payment-Provider-iFrames (die auf Ihrer Seite eingebettet sind) werden durch frame-src in der CSP gesteuert — nicht durch X-Frame-Options.

Verifizierung

Prüfen Sie den Header für Storefront und Administration separat.

Terminal Verifizierung
# Cache leeren
bin/console cache:clear

# X-Frame-Options prüfen
curl -sI https://ihr-shop.de | grep -i x-frame-options

# Erwartete Ausgabe:
# x-frame-options: SAMEORIGIN

curl -sI https://ihr-shop.de/admin | grep -i x-frame-options

# Erwartete Ausgabe (Administration):
# x-frame-options: DENY

Häufige Fehler

Payment-iFrame von X-Frame-Options blockiert

X-Frame-Options steuert ob Ihre Seite eingebettet werden darf. Die iFrames der Payment-Provider werden durch CSP frame-src kontrolliert. Verwechseln Sie diese beiden Mechanismen nicht.

DENY blockiert eigene Admin-iFrames

Manche Shopware-Plugins nutzen iFrames innerhalb der Administration. Wenn DENY gesetzt ist, funktionieren diese nicht. Prüfen Sie Ihre Plugin-Kompatibilität oder wechseln Sie auf SAMEORIGIN.

frame-ancestors und X-Frame-Options kollidieren

Wenn sowohl X-Frame-Options als auch CSP frame-ancestors gesetzt sind, hat frame-ancestors Vorrang. Setzen Sie beide Header für maximale Kompatibilität mit älteren Browsern.

Compliance-Relevanz

NIS2Art. 21(e) — Schutz vor UI-Redressing und Clickjacking-Angriffen
PCI DSS 4.0Requirement 6.2.4 — Schutz von Webanwendungen gegen Angriffe auf die Benutzeroberfläche
OWASPASVS V14.4 — Clickjacking-Schutz als Mindestanforderung

Wie steht Ihre Domain bei Clickjacking-Schutz?

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