CSP in Drupal konfigurieren
Content Security Policy in Drupal einrichten — CSP-Modul mit Nonce-Support, seckit CSP-Tab oder Custom EventSubscriber. Von Report-Only über Violation-Analyse bis Enforcement.
Content Security Policy in Drupal
Content Security Policy (CSP) ist der wichtigste HTTP-Security-Header gegen Cross-Site Scripting (XSS). Er teilt dem Browser mit, welche Ressourcen geladen werden dürfen — und blockiert alles andere. CSP ist mit 35 von 166 Punkten der einflussreichste Header im Wolf-Agents Web Security Check.
Drupal bietet drei Wege für CSP: Das drupal.org/project/csp-Modul mit nativem Nonce-Support und CKEditor-Kompatibilität, den seckit CSP-Tab für einfache Policies ohne Nonces, oder einen Custom EventSubscriber für maximale Kontrolle. Die größte Herausforderung ist die Kompatibilität mit CKEditor, der Inline-Styles und Inline-Scripts nutzt.
CSP-Implementierung in Drupal
Beginnen Sie immer im Report-Only-Modus. Der Browser meldet Verstöße in der Konsole, blockiert aber keine Ressourcen. Wählen Sie Ihre Methode basierend auf den Anforderungen: CSP-Modul für Nonces, seckit für einfache Policies, EventSubscriber für volle Kontrolle.
# CSP-Modul installieren (empfohlen für Nonce-Support)
composer require drupal/csp
drush en csp -y
drush cr
# Konfiguration unter:
# /admin/config/system/csp
# Report-Only und Enforced getrennt konfigurierbar # seckit CSP-Tab: /admin/config/system/seckit
# → Tab "Content Security Policy"
# Felder pro Direktive ausfüllen:
default-src: 'self'
script-src: 'self'
style-src: 'self' 'unsafe-inline'
img-src: 'self' data:
font-src: 'self'
object-src: 'none'
base-uri: 'self'
form-action: 'self'
# Checkbox: "Report Only" zuerst aktivieren! <?php
// modules/custom/security_headers/src/EventSubscriber/CspSubscriber.php
namespace Drupal\security_headers\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class CspSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [KernelEvents::RESPONSE => ['onResponse', 0]];
}
public function onResponse(ResponseEvent $event) {
$response = $event->getResponse();
$csp = implode('; ', [
"default-src 'self'",
"script-src 'self'",
"style-src 'self' 'unsafe-inline'",
"img-src 'self' data: https:",
"font-src 'self'",
"object-src 'none'",
"base-uri 'self'",
"form-action 'self'",
"frame-ancestors 'none'",
"upgrade-insecure-requests",
]);
// Report-Only zuerst, dann Enforcement
$response->headers->set(
'Content-Security-Policy-Report-Only', $csp);
}
} 'unsafe-inline' zu style-src hinzu. Für script-src verwenden Sie Nonces über das CSP-Modul — niemals 'unsafe-inline' für Scripts. Verifizierung und Enforcement
Lassen Sie die Policy mindestens eine Woche im Report-Only-Modus laufen. Testen Sie alle Seitentypen — Startseite, Blog-Artikel, Formulare, Benutzer-Login und besonders den CKEditor im Admin-Bereich.
# Cache leeren
drush cr
# CSP-Header prüfen
curl -sI https://ihre-domain.de | grep -i content-security-policy
# Erwartete Ausgabe (Report-Only):
# content-security-policy-report-only: default-src 'self'; ... Der Wolf-Agents Web Security Check bewertet Ihren CSP-Header mit bis zu 35 Punkten. Mit aktivem Monitoring werden Sie bei Änderungen oder fehlenden Headern sofort benachrichtigt.
Häufige Fehler bei CSP in Drupal
CKEditor Inline-Styles von CSP blockiert
CKEditor nutzt Inline-Styles extensiv. Ohne 'unsafe-inline' in style-src funktioniert der Editor nicht. Das CSP-Modul handhabt dies automatisch — bei manueller Konfiguration müssen Sie style-src 'self' 'unsafe-inline' setzen.
Views-Modul lädt externe Ressourcen
Views mit eingebetteten Medien oder externen Feldern können Ressourcen laden, die von der CSP blockiert werden. Prüfen Sie Views-Ausgaben auf externe URLs und ergänzen Sie die CSP-Direktiven entsprechend.
Mehrere Module setzen CSP-Header
Wenn sowohl das CSP-Modul als auch seckit CSP-Header setzen, überschreibt der letzte den ersten. Verwenden Sie nur ein Modul für CSP — nicht beide gleichzeitig. Deaktivieren Sie den CSP-Tab in seckit, wenn Sie das CSP-Modul nutzen.
Internal Page Cache liefert gecachte Header
Drupals Internal Page Cache cached auch HTTP-Header. Nach CSP-Änderungen müssen Sie mit drush cr den Cache leeren. Auf Produktivseiten kann der Cache dazu führen, dass verschiedene Benutzer unterschiedliche CSP-Header sehen.
Compliance-Relevanz
Eine korrekte Content Security Policy erfüllt zentrale Anforderungen mehrerer Compliance-Frameworks. CSP ist besonders relevant für E-Commerce-Seiten und Organisationen, die personenbezogene Daten verarbeiten.
Wie steht Ihre Domain bei Content Security Policy?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.