Security Headers erklärt – Der vollständige Guide
HTTP Security Headers sind Anweisungen, die ein Webserver zusammen mit der Antwort an den Browser sendet. Sie steuern, wie der Browser mit den empfangenen Inhalten umgehen soll, und schützen vor Angriffen wie Cross-Site-Scripting (XSS), Clickjacking und MIME-Sniffing. Fehlende Security Headers sind eine der häufigsten Sicherheitslücken, die der Webalyzr-Scan auf Websites findet.
Von Matthias Tichy – IT-Service Matthias Tichy, Berlin
Warum sind Security Headers wichtig?
Selbst wenn Ihre Webanwendung fehlerfrei programmiert ist, können fehlende Security Headers Angriffe ermöglichen. Ein Browser weiß ohne explizite Anweisungen nicht, ob er eingebettete Inhalte von Drittseiten zulassen, Cookies über unsichere Verbindungen senden oder die Seite in einem Iframe anzeigen soll. Security Headers schließen diese Lücken auf Transportebene – unabhängig von der verwendeten Programmiersprache oder dem Framework. In der Praxis fehlen bei über 70% der von Webalyzr gescannten Websites mindestens zwei kritische Security Headers. Die Konfiguration dauert in der Regel weniger als 30 Minuten und erfordert keine Änderungen am Anwendungscode.
Strict-Transport-Security (HSTS)
HSTS zwingt den Browser, alle zukünftigen Anfragen an die Domain über HTTPS zu senden – auch wenn der Nutzer http:// eingibt. Ohne HSTS ist die erste Anfrage eines Nutzers an Ihre Seite unverschlüsselt, was Man-in-the-Middle-Angriffe in öffentlichen WLANs ermöglicht. HSTS eliminiert dieses Risiko nach dem ersten Besuch vollständig.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadmax-age=31536000– Browser merkt sich die HSTS-Regel für 1 JahrincludeSubDomains– Gilt auch für alle Subdomainspreload– Ermöglicht Aufnahme in die Browser-Preload-Liste (dann kein erster unverschlüsselter Request mehr)
Content Security Policy (CSP)
CSP ist der mächtigste und gleichzeitig komplexeste Security Header. Er legt fest, von welchen Quellen der Browser Scripts, Styles, Bilder, Fonts und andere Ressourcen laden darf. Eine korrekt konfigurierte CSP verhindert Cross-Site-Scripting (XSS) nahezu vollständig, da eingeschleuster Schadcode nicht ausgeführt wird, wenn er nicht von einer erlaubten Quelle stammt. CSP ist der wichtigste Einzelschutz gegen XSS – effektiver als Output-Encoding allein.
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'Beginnen Sie mit einer Report-Only-Policy, um zu sehen, welche Ressourcen blockiert würden, bevor Sie die Policy scharf schalten. Nutzen Sie den Webalyzr CSP Generator für einen interaktiven Einstieg.
X-Frame-Options
X-Frame-Options verhindert, dass Ihre Website in einem Iframe auf einer fremden Seite eingebettet wird. Dies schützt vor Clickjacking-Angriffen, bei denen ein Angreifer Ihre Seite unsichtbar über seine eigene legt und Nutzer dazu bringt, unbeabsichtigt Aktionen auf Ihrer Seite auszuführen – etwa das Ändern von Passwort-Einstellungen oder das Bestellen von Produkten. Verwenden Sie DENY wenn Ihre Seite niemals in Iframes erscheinen soll, oder SAMEORIGIN wenn Sie eigene Iframes benötigen. Langfristig ersetzt frame-ancestors in der CSP diesen Header.
Weitere wichtige Security Headers
X-Content-Type-Options: nosniff
Verhindert MIME-Sniffing: Der Browser respektiert den deklarierten Content-Type und versucht nicht, den Dateityp selbst zu erraten. Ohne diesen Header könnte ein Browser eine als Bild deklarierte Datei als JavaScript ausführen, wenn der Inhalt danach aussieht. Ein einzelnes Wort – aber ein wichtiger Schutz.
Referrer-Policy
Steuert, welche Referrer-Informationen bei Links und Anfragen an Drittseiten gesendet werden. strict-origin-when-cross-origin ist die empfohlene Einstellung: Innerhalb der eigenen Domain wird der volle Pfad gesendet, an fremde Domains nur die Origin (Domain ohne Pfad). So bleiben interne URLs privat.
Permissions-Policy
Kontrolliert den Zugriff auf Browser-APIs wie Kamera, Mikrofon, Geolocation und Payment. Deaktivieren Sie alles, was Sie nicht benötigen: camera=(), microphone=(), geolocation=(). Dies verhindert, dass eingebettete Drittanbieter-Scripts unbemerkt auf sensible Geräte-Funktionen zugreifen.
Security Headers in Nginx konfigurieren
Die einfachste Methode ist die Konfiguration auf Webserver-Ebene. So gelten die Header für alle Seiten, unabhängig von der verwendeten Programmiersprache:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" 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;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;Prüfen Sie Ihre Security Headers mit dem Webalyzr Website-Scan – der Security-Check analysiert alle Header und gibt konkrete Empfehlungen zur Verbesserung.