CSP für WordPress konfigurieren

Schritt-für-Schritt-Anleitung: Content Security Policy auf WordPress einrichten, testen und aktivieren — mit fertigen functions.php-Snippets zum Kopieren.

WordPress · Schritt für Schritt

Content Security Policy auf WordPress

WordPress ist mit über 43 % Marktanteil das meistgenutzte CMS der Welt — und gleichzeitig eines der häufigsten Angriffsziele. Eine Content Security Policy (CSP) schützt Ihre WordPress-Website effektiv gegen Cross-Site Scripting (XSS), doch die Implementierung ist anspruchsvoller als bei statischen Setups: Das Plugin-Ökosystem injiziert häufig Inline-Scripts ohne Nonce-Unterstützung, und der Gutenberg-Editor benötigt großzügige Freigaben.

Die beste Strategie: Starten Sie mit einer permissiven CSP inklusive 'unsafe-inline', testen Sie ausgiebig im Report-Only-Modus und verschärfen Sie schrittweise. Zwei Wege stehen offen — über die functions.php (volle Kontrolle) oder über Security-Plugins (grafische Oberfläche, ideal für Nicht-Entwickler). Diese Anleitung zeigt beide Ansätze in vier Schritten. Der Wolf-Agents Web Security Check prüft CSP automatisch — als Teil der 166 Prüfpunkte.

1 Schritt 1 von 4

Report-Only Modus starten

Beginnen Sie immer im Report-Only-Modus. Der Browser meldet CSP-Verstöße in der Konsole, blockiert aber keine Ressourcen. So können Sie die Policy in Ruhe anpassen, ohne dass Ihre WordPress-Website für Besucher kaputt geht.

functions.php Report-Only
// functions.php
function add_csp_header() {
    // Report-Only für sicheres Testen
    header("Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;");
}
add_action('send_headers', 'add_csp_header');
Plugin-Alternative

Die Plugins Headers Security Advanced und HTTP Headers bieten eine grafische Oberfläche für CSP-Konfiguration — ideal wenn Sie functions.php nicht bearbeiten möchten.

WordPress Core und viele Plugins verwenden 'unsafe-inline' für Scripts. Starten Sie deshalb mit 'unsafe-inline' in der script-src und entfernen Sie es erst in Schritt 4 mit Nonces.
2 Schritt 2 von 4

Violations analysieren und CSP anpassen

Öffnen Sie die Browser DevTools (F12) → Console. CSP-Violations erscheinen als Warnungen mit der blockierten Ressource und der verantwortlichen Direktive. Passen Sie die Policy an, bis keine unerwarteten Violations mehr auftreten.

Violation Lösung
Inline-Script blockiert Nonce oder Hash hinzufügen (siehe Schritt 4)
Externe Bibliothek blockiert Domain zu script-src hinzufügen
Google Fonts blockiert fonts.googleapis.comstyle-src, fonts.gstatic.comfont-src
Google Analytics blockiert *.google-analytics.com *.googletagmanager.comscript-src
WebSocket blockiert wss://domain.tldconnect-src
WordPress-Plugin blockiert Plugin-Domains zu script-src / style-src hinzufügen
jQuery blockiert Prüfen ob jQuery über CDN oder lokal geladen wird
Lassen Sie die Policy mindestens 1 Woche im Report-Only-Modus laufen, bevor Sie zu Enforcement wechseln. Testen Sie besonders den Admin-Bereich (/wp-admin), den Editor (Gutenberg/Classic), und alle Formulare (Contact Form 7, WooCommerce Checkout).
3 Schritt 3 von 4

Enforcement aktivieren

Wenn keine unerwarteten Violations mehr auftreten, wechseln Sie von Content-Security-Policy-Report-Only zu Content-Security-Policy. Der Browser blockiert ab sofort nicht autorisierte Ressourcen.

functions.php Produktiv
// functions.php - Produktions-CSP
function add_csp_header() {
    $csp = "default-src 'self'; "
         . "script-src 'self' 'unsafe-inline'; "
         . "style-src 'self' 'unsafe-inline'; "
         . "img-src 'self' data: https:; "
         . "font-src 'self'; "
         . "connect-src 'self'; "
         . "frame-ancestors 'self'; "
         . "object-src 'none'; "
         . "base-uri 'self'; "
         . "form-action 'self'";
    header("Content-Security-Policy: " . $csp);
}
add_action('send_headers', 'add_csp_header');
Testen Sie gründlich auf allen Seiten — inklusive Login, Checkout und Admin-Bereich — bevor Sie den Report-Only-Modus verlassen. Behalten Sie den Reporting-Endpoint bei, um auch im Enforcement-Modus Violations zu erfassen.
4 Schritt 4 von 4 · Fortgeschritten

Nonces einrichten für maximale Sicherheit

Nonces sind einmalige Token, die bei jedem Request neu generiert werden. Mit Nonces können Sie 'unsafe-inline' aus Ihrer CSP entfernen — das höchste Sicherheitsniveau. WordPress bietet über den script_loader_tag-Filter die Möglichkeit, alle registrierten Scripts automatisch mit einem Nonce zu versehen.

functions.php Nonces
// functions.php - Vollständige Nonce-Implementierung

function wp_csp_nonce() {
    static $nonce;
    if (!$nonce) {
        $nonce = base64_encode(random_bytes(16));
    }
    return $nonce;
}

function add_csp_header() {
    $nonce = wp_csp_nonce();
    header("Content-Security-Policy: script-src 'nonce-{$nonce}' 'strict-dynamic'; object-src 'none'; base-uri 'self';");
}
add_action('send_headers', 'add_csp_header');

function add_nonce_to_scripts($tag, $handle, $src) {
    $nonce = wp_csp_nonce();
    if (strpos($tag, 'nonce=') === false) {
        $tag = str_replace('<script ', '<script nonce="' . esc_attr($nonce) . '" ', $tag);
    }
    return $tag;
}
add_filter('script_loader_tag', 'add_nonce_to_scripts', 10, 3);
Viele WordPress-Plugins generieren Inline-Scripts ohne Nonce-Unterstützung. Testen Sie intensiv im Report-Only-Modus. Falls nötig: Plugin-Alternativen suchen, Plugin-Entwickler kontaktieren, oder temporär 'unsafe-inline' beibehalten.

Wie steht Ihre Domain bei Content Security Policy?

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