HTTP-Security-Header: das Minimum, das heute gesetzt gehört
CSP, HSTS, X-Content-Type-Options und Co.: was wirklich schützt, was veraltet ist und in welcher Reihenfolge man es ohne Ausfall einführt.
Sicherheit · Veröffentlicht: 10. Juni 2026 · 3 Min. Lesezeit · Марк Лебедев
Security-Header sind einer der seltenen Fälle, in denen ein paar Zeilen Konfiguration ganze Angriffsklassen schließen. Und einer der seltenen Fälle, in denen eine unbedachte Einführung die Website in Sekunden zerlegt. Die Reihenfolge ist also so wichtig wie der Inhalt.
Fangen Sie mit den ungefährlichen an
Diese drei lassen sich fast risikofrei setzen:
X-Content-Type-Options: nosniff — verbietet dem Browser, den Inhaltstyp zu raten. Schließt das Szenario, in dem eine hochgeladene „Textdatei" als Skript ausgeführt wird.
Referrer-Policy: strict-origin-when-cross-origin — verhindert, dass der volle Seitenpfad in fremde Analytics abfließt. Das ist heute Browser-Default, explizit gesetzt aber verlässlicher.
Strict-Transport-Security: max-age=31536000; includeSubDomains — HSTS erzwingt HTTPS. Achtung: nur setzen, wenn die gesamte Website und alle Subdomains bereits über HTTPS laufen. Ein schnelles Zurückrollen gibt es nicht — Browser merken sich den Header über die volle max-age. Starten Sie mit max-age=300, prüfen Sie, dass nichts bricht, und erhöhen Sie dann.
CSP — am nützlichsten und am gefährlichsten
Die Content-Security-Policy legt fest, woher Skripte, Styles und Bilder geladen werden dürfen. Sie blockt die meisten XSS — und zerlegt die Seite, wenn die Policy auf Verdacht geschrieben wurde.
Der richtige Weg hat drei Schritte:
- Beobachtungsmodus einschalten:
Content-Security-Policy-Report-Onlymit Report-Endpunkt. Es wird nichts blockiert, aber Sie sehen, was blockiert würde. - Zwei Wochen Reports sammeln und alles Legitime in die Policy aufnehmen — Widgets, Schriften, Analytics.
- Auf den scharfen Header umschalten.
Eine minimale sinnvolle Policy für eine Site ohne Inline-Skripte:
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data:; frame-ancestors 'none'; base-uri 'self'
Die Direktive frame-ancestors 'none' ersetzt das veraltete X-Frame-Options und schließt Clickjacking.
Was nicht mehr gebraucht wird
X-XSS-Protection — veraltet, moderne Browser ignorieren den Header, in älteren war er selbst eine Schwachstelle. Feature-Policy heißt inzwischen Permissions-Policy.
Wie man prüft
Header werden auf mehreren Ebenen gesetzt — CDN, Reverse Proxy, Anwendung — und gehen bei Infrastrukturänderungen leicht verloren oder doppeln sich. Prüfen Sie nicht die Konfiguration, sondern die tatsächliche Antwort auf mehreren URL-Typen: Startseite, eine Route aus dem SPA-Routing, eine statische Datei, ein API-Endpunkt. Die Unterschiede dazwischen sind der häufigste Auditfund.
Und achten Sie auf Regressionen: Ein Header, der beim Umzug auf ein neues CDN versehentlich wegfällt, meldet sich nicht — bis es zu spät ist.
Ebenfalls lesenswert
Prüfen Sie, was davon auf Ihrer Website steckt
Der kostenlose Scan zeigt kaputte Links, JS-Fehler und Performance-Probleme in einer Minute.