Security-Header-Architektur für Contao
Drei Konfigurationswege im Vergleich: Natives CSP-Backend (5.3+), Symfony EventSubscriber für zentrale Header-Verwaltung und .htaccess-Fallback für Apache-basiertes Hosting.
Architektur-Überblick für Contao
Contao basiert auf Symfony und bietet dadurch drei saubere Konfigurationswege für Security Headers. Der Wolf-Agents Web Security Check prüft 166 Punkte und zeigt Ihnen, welche Header Ihre Contao-Installation bereits setzt und wo Handlungsbedarf besteht.
Natives CSP-Backend (ab 5.3) für die Content Security Policy, ein Symfony EventSubscriber für alle weiteren Header, und die public/.htaccess als Apache-Fallback. Die Kombination aus EventSubscriber und nativem CSP-Backend ist die empfohlene Architektur.
Zentrale Header-Konfiguration
Der EventSubscriber ist der empfohlene Weg für alle Header außer CSP. Er reagiert auf jede HTTP-Response und setzt die Header zentral — unabhängig von Cache-Schicht oder Hosting-Umgebung.
<?php
// src/EventSubscriber/SecurityHeaderSubscriber.php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class SecurityHeaderSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents(): array {
return [KernelEvents::RESPONSE => ['onResponse', 0]];
}
public function onResponse(ResponseEvent $event): void {
$response = $event->getResponse();
// Basis Security Headers
$response->headers->set('Strict-Transport-Security',
'max-age=31536000; includeSubDomains; preload');
$response->headers->set('X-Content-Type-Options', 'nosniff');
$response->headers->set('X-Frame-Options', 'SAMEORIGIN');
$response->headers->set('Referrer-Policy',
'strict-origin-when-cross-origin');
$response->headers->set('Permissions-Policy',
'camera=(), microphone=(), geolocation=()');
}
} # config/services.yaml — Service registrieren
services:
App\EventSubscriber\SecurityHeaderSubscriber:
tags: ['kernel.event_subscriber'] # public/.htaccess — Security Headers Fallback
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule> Bei der Managed Edition liegt die .htaccess unter public/.htaccess. Der EventSubscriber wird in src/EventSubscriber/ angelegt und über config/services.yaml registriert. Bei Autoconfiguration erkennt Symfony den EventSubscriber automatisch.
Verifizierung
Nach der Konfiguration leeren Sie den Contao-Cache und prüfen die Header per curl. Ohne cache:clear werden Änderungen am EventSubscriber nicht wirksam.
# Cache leeren (PFLICHT nach jeder Änderung)
vendor/bin/contao-console cache:clear
# Security Headers prüfen
curl -sI https://ihre-domain.de | grep -iE "strict-transport|x-content-type|x-frame|referrer-policy|permissions-policy"
# Erwartete Ausgabe:
# strict-transport-security: max-age=31536000; includeSubDomains; preload
# x-content-type-options: nosniff
# x-frame-options: SAMEORIGIN
# referrer-policy: strict-origin-when-cross-origin
# permissions-policy: camera=(), microphone=(), geolocation=() Häufige Fehler bei der Architektur in Contao
contao-console cache:clear vergessen
Nach jeder Änderung am EventSubscriber oder an config.yaml muss vendor/bin/contao-console cache:clear ausgeführt werden. Ohne Cache-Invalidierung sehen Sie weiterhin die alten Header.
Contao-Extension überschreibt Header-Konfiguration
Manche Contao-Extensions registrieren eigene EventSubscriber mit höherer Priorität, die Ihre Header überschreiben. Prüfen Sie mit debug:event-dispatcher kernel.response die Subscriber-Reihenfolge.
Content-Elemente Inline-Styles blockiert
Contao-Content-Elemente nutzen Inline-Styles für Abstände und Ausrichtung. Wenn Sie CSP konfigurieren, beachten Sie, dass 'unsafe-inline' in style-src nötig sein kann — oder nutzen Sie Nonces über den CspHandler.
Compliance-Relevanz
Eine konsolidierte Header-Architektur ist Voraussetzung für die Compliance-Anforderungen, die besonders für Behörden- und Agenturwebsites auf Contao-Basis relevant sind.
Wie steht Ihre Domain bei Implementierungs-Architektur?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.