CSP auf Hetzner konfigurieren

Content Security Policy auf Ihrem Hetzner vServer oder Cloud Server einrichten — von Report-Only über Violation-Analyse bis Enforcement. Mit Nginx- und Apache-Konfigurationen.

Hetzner · Schritt für Schritt

Content Security Policy auf Hetzner

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.

Auf einem Hetzner vServer (CX, CPX, CCX) haben Sie vollen Root-Zugriff und konfigurieren CSP direkt in nginx.conf oder apache2.conf. Auch auf Hetzner Cloud Servern und Dedizierten Servern funktioniert die Konfiguration identisch. Nur bei Hetzner Managed Hosting haben Sie keinen direkten Zugriff auf die Webserver-Konfiguration — dort müssen Sie CSP über .htaccess oder die Applikation setzen.

1 Schritt 1 von 4

CSP im Report-Only-Modus aktivieren

Beginnen Sie immer im Report-Only-Modus. Der Browser meldet CSP-Verstöße in der Konsole, blockiert aber keine Ressourcen. Auf einem Hetzner vServer erstellen Sie eine separate Konfigurationsdatei, die über die Hauptkonfiguration eingebunden wird.

Nginx
/etc/nginx/conf.d/csp.conf Report-Only
# /etc/nginx/conf.d/csp.conf — Report-Only
add_header Content-Security-Policy-Report-Only
  "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'"
  always;
Apache
/etc/apache2/conf-available/csp.conf Report-Only
# /etc/apache2/conf-available/csp.conf — Report-Only
<IfModule mod_headers.c>
    Header always set Content-Security-Policy-Report-Only "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'"
</IfModule>
Hetzner vServer vs. Cloud vs. Managed

Auf vServern und Cloud Servern haben Sie vollen Root-Zugriff — die Konfiguration erfolgt direkt in /etc/nginx/ oder /etc/apache2/. Bei Apache auf Hetzner aktivieren Sie die Config mit sudo a2enconf csp && sudo systemctl reload apache2.

Webserver neu laden:
sudo nginx -t && sudo systemctl reload nginx
2 Schritt 2 von 4

Violations analysieren und Policy anpassen

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

Violation Lösung
Google Analytics blockiert *.google-analytics.com *.googletagmanager.com in script-src
Google Fonts blockiert fonts.googleapis.com in style-src, fonts.gstatic.com in font-src
YouTube/Vimeo Embeds *.youtube.com *.vimeo.com in frame-src
Inline-Scripts blockiert Nonces oder Hashes verwenden — niemals 'unsafe-inline' in script-src
CDN-Assets blockiert CDN-Domain zur entsprechenden Direktive hinzufügen
Lassen Sie die Policy mindestens 1 Woche im Report-Only-Modus laufen. Testen Sie alle Seitentypen — Startseite, Blog, Formulare, Login-Bereich und Admin-Panels.
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.

Nginx
/etc/nginx/conf.d/csp.conf Produktiv
# /etc/nginx/conf.d/csp.conf — Enforcement
add_header Content-Security-Policy
  "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'"
  always;
Apache
/etc/apache2/conf-available/csp.conf Produktiv
# /etc/apache2/conf-available/csp.conf — Enforcement
<IfModule mod_headers.c>
    Header always set Content-Security-Policy "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'"
</IfModule>
Testen Sie nach der Umstellung alle Seitentypen gründlich. Achten Sie besonders auf Login-Formulare, Payment-Flows und CMS-Admin-Panels, die Inline-Scripts benötigen können.
4 Schritt 4 von 4

Verifizierung und Monitoring

Prüfen Sie den aktiven CSP-Header per curl. Für dauerhaftes Monitoring empfiehlt sich ein Reporting-Endpoint, der CSP-Violations protokolliert und Sie bei neuen Verstößen benachrichtigt.

Terminal Verifizierung
# Konfiguration testen und Webserver neu laden
sudo nginx -t && sudo systemctl reload nginx
# oder für Apache
sudo apachectl configtest && sudo systemctl reload apache2

# CSP-Header prüfen
curl -sI https://ihre-domain.de | grep -i content-security-policy
Automatisiertes Monitoring

Der Wolf-Agents Web Security Check prüft Ihren CSP-Header automatisch und bewertet ihn mit bis zu 35 Punkten. Mit aktivem Monitoring werden Sie bei Änderungen oder fehlenden Headern sofort benachrichtigt.

Häufige Fehler bei CSP auf Hetzner

Certbot überschreibt nginx.conf

Bei certbot --nginx Renewal-Hooks kann die Nginx-Konfiguration überschrieben werden. Setzen Sie CSP in einer separaten Datei unter /etc/nginx/conf.d/, nicht direkt im Server-Block der Domain-Config. Alternativ: Certbot Renewal-Hook mit --deploy-hook konfigurieren.

CSP blockiert CMS Admin-Panels

WordPress, TYPO3 und andere CMS nutzen Inline-Scripts im Admin-Bereich. Lösung: Separate CSP für den Admin-Pfad mit location /wp-admin/ in Nginx oder <Location /admin> in Apache — dort eine lockere Policy setzen.

Hetzner Load Balancer Header-Passthrough

Der Hetzner Load Balancer leitet HTTP-Header vom Backend durch, setzt aber keine eigenen Security-Header. CSP muss auf jedem Backend-Server konfiguriert werden — nicht am Load Balancer selbst.

Nginx add_header Vererbung

Nginx vererbt add_header-Direktiven nur, wenn im aktuellen Block keine eigenen add_header-Direktiven existieren. Ein einzelnes add_header in einem location-Block überschreibt alle geerbten Header — auch den CSP-Header.

Compliance-Relevanz

Eine korrekte Content Security Policy erfüllt zentrale Anforderungen mehrerer Compliance-Frameworks. Gerade auf selbstverwalteten Hetzner Servern liegt die Verantwortung für die Header-Konfiguration vollständig beim Betreiber.

PCI DSS 4.0Anforderung 6.4.3 — Kontrolle aller auf Zahlungsseiten geladenen Scripts (seit März 2025 verpflichtend)
NIS2Art. 21(e) — Sicherheit bei Erwerb, Entwicklung und Wartung von Netz- und Informationssystemen
BSIAPP.3.1 — Webserver-Absicherung mit Security Headern

Wie steht Ihre Domain bei Content Security Policy?

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