HTTP-Sicherheitsheader: Der vollständige Leitfaden für 2025
HTTP-Sicherheitsheader sind Anweisungen an den Browser, wie er Ihre Website behandeln soll. Richtig konfiguriert, verhindern sie ganze Angriffskategorien — von Cross-Site-Scripting über Clickjacking bis zum Downgrade auf unverschlüsselte Verbindungen. Das Beste: Die Konfiguration dauert minuten, der Schutz ist sofort aktiv.
Die 7 wichtigsten Sicherheitsheader
1. Strict-Transport-Security (HSTS)
Was: Erzwingt HTTPS für alle Verbindungen — auch wenn der Benutzer http:// eingibt.
Warum: Verhindert SSL-Stripping-Angriffe, bei denen ein Angreifer die Verbindung auf HTTP herabstuft.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
| Parameter | Bedeutung |
|---|---|
| max-age=31536000 | Browser merkt sich HTTPS für 1 Jahr |
| includeSubDomains | Gilt auch für alle Subdomains |
| preload | Aufnahme in Browser-Preload-Liste (permanent HTTPS) |
Vorsicht: Aktivieren Sie
includeSubDomainserst, wenn alle Subdomains HTTPS unterstützen. Ein vergessenes Staging-System kann sonst unerreichbar werden.
2. Content-Security-Policy (CSP)
Was: Definiert, welche Ressourcen (Scripts, Styles, Bilder) der Browser laden darf.
Warum: Primärer Schutz gegen Cross-Site-Scripting (XSS) — selbst wenn eine XSS-Lücke existiert, verhindert CSP die Ausführung eingeschleusten Codes.
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'
| Direktive | Erlaubt |
|---|---|
| default-src 'self' | Standardmäßig nur eigene Domain |
| script-src 'self' | Scripts nur von eigener Domain |
| style-src 'self' 'unsafe-inline' | Styles + Inline-Styles (oft nötig für CMS) |
| img-src 'self' data: https: | Bilder von eigener Domain, Data-URLs, HTTPS |
| frame-ancestors 'none' | Seite darf nicht eingebettet werden (Clickjacking) |
Tipp: Starten Sie mit
Content-Security-Policy-Report-Onlyim Report-Modus und analysieren Sie Verstöße, bevor Sie blockierend schalten.
3. X-Content-Type-Options
Was: Verhindert MIME-Type-Sniffing durch den Browser.
Warum: Ohne diesen Header kann der Browser eine Datei anders interpretieren als beabsichtigt — z.B. eine Bilddatei als JavaScript ausführen.
X-Content-Type-Options: nosniff
Ein-Zeilen-Header, keine Konfiguration nötig. Immer setzen.
4. X-Frame-Options
Was: Kontrolliert, ob Ihre Seite in einem <iframe> eingebettet werden darf.
Warum: Schutz gegen Clickjacking — ein Angreifer legt eine unsichtbare Seite über einen sichtbaren Button.
X-Frame-Options: DENY
| Wert | Bedeutung |
|---|---|
| DENY | Einbettung komplett verboten |
| SAMEORIGIN | Nur von eigener Domain (z.B. für Admin-Panels) |
Hinweis:
frame-ancestorsin CSP ist der modernere Ersatz. Setzen Sie trotzdem beide für maximale Browser-Kompatibilität.
5. Referrer-Policy
Was: Kontrolliert, welche URL-Informationen beim Navigieren an die Zielseite gesendet werden.
Warum: Verhindert Datenlecks durch URLs, die Session-Tokens, Suchbegriffe oder interne Pfade enthalten.
Referrer-Policy: strict-origin-when-cross-origin
| Wert | Verhalten |
|---|---|
| no-referrer | Kein Referrer (maximaler Schutz, bricht manches Analytics) |
| strict-origin-when-cross-origin | Empfohlen — Origin bei Cross-Site, volle URL bei Same-Site |
| same-origin | Referrer nur bei gleicher Domain |
6. Permissions-Policy
Was: Kontrolliert, welche Browser-APIs Ihre Seite und eingebettete Inhalte nutzen dürfen.
Warum: Verhindert, dass Drittanbieter-Scripts auf Kamera, Mikrofon oder Standort zugreifen.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()
Die leeren Klammern () bedeuten: Für niemanden erlaubt — weder die eigene Seite noch eingebettete Inhalte.
7. Cross-Origin-Opener-Policy (COOP) und Cross-Origin-Embedder-Policy (COEP)
Was: Isoliert Ihre Seite vor Side-Channel-Angriffen (Spectre).
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Hinweis: Diese Header können Drittanbieter-Einbettungen (YouTube, Google Maps) brechen. Nur setzen, wenn Sie cross-origin Isolation benötigen.
Konfigurationsbeispiele
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Apache (.htaccess)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "DENY"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Next.js (next.config.js)
const securityHeaders = [
{ key: 'Strict-Transport-Security', value: 'max-age=31536000; includeSubDomains; preload' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
{ key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
]
Header, die Sie entfernen sollten
| Header | Warum entfernen |
|---|---|
| Server: Apache/2.4.41 | Verrät Server-Software und -Version |
| X-Powered-By: Express | Verrät Framework |
| X-AspNet-Version | Verrät ASP.NET-Version |
# Nginx: Server-Header entfernen
server_tokens off;
Testen und Überwachen
| Tool | URL | Note | |---|---|---| | Security Headers | securityheaders.com | Ziel: Note A+ | | Mozilla Observatory | observatory.mozilla.org | Umfassende Analyse | | WarDek Scanner | wardek.com | OWASP + Header + Compliance |
Häufige Fehler
| Fehler | Konsequenz | Lösung |
|---|---|---|
| CSP zu streng beim ersten Versuch | Website funktioniert nicht | Report-Only-Modus zuerst |
| HSTS mit includeSubDomains ohne Prüfung | Subdomains ohne HTTPS unerreichbar | Erst alle Subdomains prüfen |
| Header nur auf Hauptseite, nicht auf API | API-Endpunkte ungeschützt | Server-weit konfigurieren |
| X-Frame-Options: ALLOW-FROM | Veraltet, wird ignoriert | frame-ancestors in CSP verwenden |
Fazit
HTTP-Sicherheitsheader sind eine der effektivsten und einfachsten Sicherheitsmaßnahmen für Webanwendungen. In wenigen Minuten konfiguriert, schützen sie gegen XSS, Clickjacking, Protokoll-Downgrades und Datenlecks. Es gibt keinen Grund, sie nicht zu setzen.
Scannen Sie Ihre Website kostenlos mit WarDek — OWASP, NIS2, DSGVO, AI Act Compliance in einem Scan.