HTTP-Sicherheits-Header weisen den Browser an, bestimmte Angriffe zu blockieren. Sie kosten nichts, sind schnell umgesetzt und reduzieren die Wirkung von XSS, Clickjacking und Downgrade-Angriffen.
Die wichtigsten Header
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()
Cross-Origin-Opener-Policy: same-origin
- HSTS: Erzwingt HTTPS. Erst mit kurzem
max-agetesten,includeSubDomainsnur, wenn wirklich alle Subdomains HTTPS können.preloadist faktisch nicht mehr rückgängig zu machen. - X-Frame-Options bzw. CSP
frame-ancestors: Schutz vor Clickjacking. WordPress setzt für Admin und Login bereitsSAMEORIGIN. - X-XSS-Protection ist veraltet und kann weggelassen werden.
Content Security Policy (CSP)
Die CSP ist der wirksamste, aber auch anspruchsvollste Header. Sie legt fest, von wo Skripte, Styles, Bilder usw. geladen werden dürfen. WordPress, Page-Builder und viele Plugins setzen Inline-Skripte ein, deshalb ist eine strikte CSP oft schwer umzusetzen.
Vorgehen:
- Mit
Content-Security-Policy-Report-Onlystarten und Verstösse sammeln (z. B. über einen Report-Endpunkt oder Dienste wie report-uri.com). - Quellen inventarisieren (Analytics, Fonts, Embeds, CDN, Zahlungsanbieter).
- Pragmatische Policy durchsetzen und schrittweise verschärfen.
Content-Security-Policy:
default-src 'self';
script-src 'self' 'unsafe-inline' https://www.googletagmanager.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https:;
connect-src 'self';
frame-ancestors 'self';
base-uri 'self';
form-action 'self';
object-src 'none';
upgrade-insecure-requests
Auch eine CSP mit 'unsafe-inline' bringt etwas: object-src, base-uri, form-action und frame-ancestors schliessen wichtige Lücken, und connect-src erschwert das Exfiltrieren von Daten durch Skimmer. Der Goldstandard sind Nonces oder Hashes statt 'unsafe-inline'; WordPress unterstützt das mit wp_get_inline_script_tag() und dem Filter wp_inline_script_attributes.
Wo setzen?
- Webserver (empfohlen):
add_header … always;in Nginx,Header always set …in Apache. - CDN/Edge (Cloudflare Transform Rules).
- PHP über den Hook
send_headers. Greift nicht für statische Dateien und nicht für Seiten aus dem Page-Cache, wenn dieser die Header nicht speichert.
Prüfen
securityheaders.com und das Mozilla HTTP Observatory bewerten die Konfiguration. Danach Frontend, Admin, Block-Editor, Checkout und Formulare gründlich testen und in der Browser-Konsole auf CSP-Verstösse achten.
Weiterführende Artikel
- Webserver-Konfiguration für WordPress: Nginx und Apache
- WAF-Optionen: Edge-, Server- und Plugin-WAF im Vergleich
- Die WordPress-Bedrohungslandschaft: typische Angriffsvektoren