HTTP Security Header: HSTS, CSP und weitere
Was sind HTTP Security Header? HSTS, Content-Security-Policy, X-Content-Type-Options und Referrer-Policy mit Nginx und .htaccess setzen und testen.

Inhalt
HTTP Security Header sind Regeln, die Ihr Webserver mit jeder Seite mitschickt und die dem Browser sagen, wie er die Seite sicher verarbeiten soll. Schutzmaßnahmen wie das Erzwingen von HTTPS, das Verhindern, dass die Seite heimlich in einem Frame auf anderen Websites angezeigt wird, und das Stoppen nicht erlaubter Skripte lassen sich mit wenigen Zeilen Konfiguration hinzufügen.
In dieser Anleitung erklären wir die wichtigsten Security Header, wofür jeder einzelne gut ist, wie Sie sie mit Nginx und .htaccess setzen, wie Sie eine Content-Security-Policy einführen, ohne die Website kaputt zu machen, und wie Sie die Header testen.
Empfohlene Header
| Header | Was macht er? | Beispielwert |
|---|---|---|
Strict-Transport-Security | Sorgt dafür, dass der Browser die Website nur über HTTPS öffnet (HSTS) | max-age=31536000; includeSubDomains |
X-Content-Type-Options | Verhindert, dass der Browser den Dateityp errät | nosniff |
X-Frame-Options | Verhindert, dass die Seite auf anderen Websites in einem Frame geöffnet wird | SAMEORIGIN |
Referrer-Policy | Legt fest, welche Adressangaben bei Links auf andere Websites übermittelt werden | strict-origin-when-cross-origin |
Permissions-Policy | Schränkt Browserfunktionen wie Kamera, Mikrofon und Standort ein | camera=(), microphone=(), geolocation=() |
Content-Security-Policy | Bestimmt, aus welchen Quellen Skripte, Stile und Bilder geladen werden dürfen | Je nach Website |
HSTS: Strict-Transport-Security
HSTS weist den Browser an, Ihre Website für einen bestimmten Zeitraum nur über HTTPS zu öffnen. Selbst wenn der Benutzer die Adresse mit http:// eintippt oder auf einen alten Link klickt, wechselt der Browser direkt zu HTTPS; das erschwert es, sich im ersten Moment in die Verbindung einzuklinken.
Strict-Transport-Security: max-age=31536000; includeSubDomains
max-age: Die Gültigkeitsdauer der Regel in Sekunden.31536000ist ein Jahr.includeSubDomains: Wendet die Regel auf alle Subdomains an. Haben Sie eine Subdomain ohne HTTPS, lassen Sie diese Option weg.
Achtung: Browser merken sich die HSTS-Regel für die Dauer von max-age. Testen Sie zuerst mit einer kurzen Dauer (zum Beispiel max-age=300) und verlängern Sie sie erst, wenn Sie sicher sind, dass HTTPS überall auf Ihrer Website und Ihren Subdomains funktioniert. Die Option preload, mit der Ihre Domain in die fest in Browser eingebaute HSTS-Liste aufgenommen wird, ist ein schwer umkehrbarer Schritt; verwenden Sie sie nicht, wenn Sie nicht sicher sind, was Sie tun. Die Einrichtung von SSL erklären wir in unserem Artikel Was ist ein SSL-Zertifikat?.
X-Content-Type-Options, X-Frame-Options und Referrer-Policy
Diese drei Header lassen sich fast jeder Website ohne Risiko hinzufügen:
X-Content-Type-Options: nosniff: Verhindert, dass der Browser versucht, den Typ einer Datei zu erraten; so wird zum Beispiel eine als Bild geladene Datei nicht als Skript ausgeführt.X-Frame-Options: SAMEORIGIN: Erlaubt, dass Ihre Seite nur auf Ihrer eigenen Website in einem Frame geöffnet wird. Das verhindert Angriffe, bei denen Ihre Seite in einen unsichtbaren Frame eingebettet wird und Benutzer unbemerkt zum Klicken gebracht werden (Clickjacking). Muss Ihre Website auf einer anderen Website eingebettet angezeigt werden, verwenden Sie die CSP-Einstellungframe-ancestors.Referrer-Policy: strict-origin-when-cross-origin: Übermittelt bei Links auf andere Websites nicht die vollständige Seitenadresse, sondern nur die Domain. Enthalten Ihre Adressen Sitzungsinformationen oder personenbezogene Daten, verhindert das, dass diese nach außen gelangen.
Permissions-Policy
Schaltet Browserfunktionen ab, die Ihre Website nicht nutzt. Selbst wenn ein auf Ihrer Website eingebundenes Skript kompromittiert wird, kann es nicht auf Kamera, Mikrofon oder Standort zugreifen:
Permissions-Policy: camera=(), microphone=(), geolocation=()
Nutzt Ihre Website eine dieser Funktionen (zum Beispiel den Standort für eine Filialsuche), entfernen Sie die betreffende Funktion aus der Liste oder erlauben Sie sie nur für Ihre eigene Domain: geolocation=(self).
Content-Security-Policy (CSP)
CSP ist der stärkste Header, verlangt bei der Einrichtung aber die meiste Sorgfalt. Er teilt dem Browser mit, aus welchen Quellen Skripte, Stile, Schriftarten, Bilder und Verbindungen geladen werden dürfen. Nicht erlaubte Quellen werden blockiert; das erschwert es einem in Ihre Website eingeschleusten Skript, ausgeführt zu werden oder Daten zu senden.
Eine einfache Startregel:
Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'
Verwenden Sie Analyse-, Werbe-, Chat- oder Zahlungswerkzeuge, müssen Sie deren Domains in die entsprechenden Regeln aufnehmen; andernfalls funktionieren sie nicht.
CSP einführen, ohne die Website kaputt zu machen:
- Fügen Sie die Regel zuerst mit dem Header
Content-Security-Policy-Report-Onlyhinzu. In diesem Modus blockiert der Browser nichts, sondern schreibt nur die Quellen, die gegen die Regel verstoßen, in die Konsole. - Rufen Sie alle Seiten Ihrer Website auf und notieren Sie die CSP-Warnungen in der Browserkonsole.
- Nehmen Sie die Quellen, die Sie wirklich brauchen, in die Regel auf.
- Wenn keine Warnungen mehr auftreten, ändern Sie den Header in
Content-Security-Policy.
Header in Nginx setzen
Fügen Sie Folgendes in Ihren Server-Block ein:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
always: Sorgt dafür, dass der Header auch auf Fehlerseiten gesendet wird.- Eine wichtige Falle: Wenn Sie in Nginx einem
location-Block eine eigeneadd_header-Zeile hinzufügen, übernimmt dieser Block keine deradd_header-Zeilen der übergeordneten Ebene mehr. Schreiben Sie inlocation-Blöcken, in denen Sie zum Beispiel einen Cache-Header hinzufügen, auch die Security Header erneut oder sammeln Sie die Header in einer gemeinsamen Datei und binden Sie sie mitincludeein.
Anschließend sudo nginx -t und sudo systemctl reload nginx. Die Grundlagen von Nginx erklären wir in unserer Anleitung Nginx installieren.
Im Webhosting mit .htaccess setzen
Bei Hostings mit Apache oder LiteSpeed fügen Sie Folgendes in die Datei .htaccess im Stammordner der Website ein:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>
Ein einziger Tippfehler in der Datei .htaccess kann dazu führen, dass die gesamte Website einen Fehler 500 liefert; sichern Sie die Datei vor der Änderung und prüfen Sie Ihre Website direkt danach. Erhalten Sie einen Fehler, folgen Sie den Schritten in unserem Artikel HTTP-Fehlercodes.
Sichere Einstellungen für Cookies
Sitzungscookies sind genauso wichtig wie Security Header. Stellen Sie sicher, dass bei den Sitzungscookies Ihrer Anwendung folgende Attribute gesetzt sind:
Secure: Das Cookie wird nur über HTTPS-Verbindungen gesendet.HttpOnly: Auf das Cookie kann nicht per JavaScript zugegriffen werden; ein eingeschleustes Skript kann das Sitzungscookie nicht stehlen.SameSite=Lax(oderStrict): Begrenzt, dass das Cookie mit Anfragen von anderen Websites gesendet wird.
WordPress, Laravel und andere verbreitete Software nehmen diese Einstellungen bei HTTPS meist selbst vor; wenn Sie Ihre eigene Anwendung schreiben, prüfen Sie die Sitzungseinstellungen.
Testen
curl -I https://ihredomain.de
Der Befehl listet die Header auf, die Ihre Website sendet. Auch im Tab Network der Entwicklerwerkzeuge, die Sie im Browser mit F12 öffnen, sehen Sie die Antwort-Header einer Seite. Testseiten wie securityheaders.com listen fehlende Header und Empfehlungen auf, sobald Sie Ihre Adresse eingeben.
Security Header sind eine Schutzschicht; aktuelle Software, starke Passwörter und regelmäßige Backups bleiben der grundlegende Schutz. Allgemeine Sicherheitsschritte für Ihren eigenen Server finden Sie in unserer Checkliste Linux Server absichern.
Security Header bei Nodesty
In den Webhosting-Paketen von Nodesty unterstützt der Webserver LiteSpeed .htaccess-Regeln; Sie können die Security Header über den Dateimanager in Ihre .htaccess eintragen und HSTS dank kostenlosem SSL sicher nutzen. Zusätzlich stoppt Imunify360 schädliche Anfragen, bevor sie Ihre Website erreichen. Verwalten Sie Ihren eigenen Webserver auf einem AMD Ryzen 9 9950X vServer, können Sie alle Header nach Belieben in Ihrer Nginx-Konfiguration festlegen.
Häufig gestellte Fragen
Schützen Security Header meine Website vor Hackerangriffen?
Allein nicht. Security Header geben dem Browser zusätzliche Regeln und begrenzen so die Wirkung bestimmter Angriffsarten; sie verhindern zum Beispiel, dass eine Seite heimlich in einem Frame auf einer anderen Website geöffnet wird oder unerwartete Skripte ausgeführt werden. Aktuelle Software, starke Passwörter und Backups bleiben der grundlegende Schutz.
Kann ich HSTS nach dem Aktivieren wieder zurücknehmen?
Browser merken sich die HSTS-Regel für die Dauer von max-age. Sie können die Regel entfernen, indem Sie die Dauer auf 0 setzen, das wirkt aber nur in Browsern, die die Website erneut besuchen. Testen Sie HSTS deshalb zuerst mit einer kurzen Dauer und verlängern Sie sie erst, wenn Sie sicher sind, dass HTTPS überall auf Ihrer Website einwandfrei funktioniert.
Kann eine Content-Security-Policy meine Website kaputt machen?
Ja. CSP blockiert das Laden von Skripten, Stilen, Schriftarten und Bildern aus nicht erlaubten Quellen. Externe Quellen wie Analyse-, Werbe- und Chat-Werkzeuge funktionieren nicht, wenn sie nicht in der Liste stehen. Testen Sie die Regel zuerst mit dem Header Content-Security-Policy-Report-Only und erweitern Sie sie anhand der Warnungen in der Browserkonsole.
Sollte ich den Header X-XSS-Protection setzen?
Nein. Dieser Header aktivierte einen Schutz in alten Browsern, und aktuelle Browser unterstützen ihn nicht mehr. Der eigentliche Schutz gegen XSS ist die korrekte Verarbeitung von Benutzereingaben und eine gut eingestellte Content-Security-Policy.
Wie setze ich Security Header im Webhosting?
Bei Hostings mit Apache oder LiteSpeed fügen Sie sie mit Zeilen nach dem Muster Header always set in die Datei .htaccess im Stammordner der Website ein. Bei WordPress können Sie diese Header bei manchen Sicherheits-Plugins auch in deren Einstellungen hinzufügen.
Wie prüfe ich, ob die Header funktionieren?
In den Entwicklerwerkzeugen des Browsers sehen Sie im Tab Network die Antwort-Header einer Seite, auf der Kommandozeile zeigt curl -I die Header an, und eine Testseite wie securityheaders.com listet fehlende Header auf, sobald Sie Ihre Adresse eingeben.
Über den Autor
Nodesty-Team · Infrastruktur und Support
Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.
Verwandte Artikel

UFW Firewall: Anleitung für die Ubuntu-Firewall
Was ist UFW und wie nutzen Sie es? Firewall unter Ubuntu aktivieren, Port- und IP-Regeln, Regeln löschen, App-Profile, Rate Limiting, IPv6 und Docker.

Was ist ein SSH Tunnel? Anleitung zur Portweiterleitung
Was ist ein SSH Tunnel und wie nutzen Sie ihn? Lokale, entfernte und dynamische Portweiterleitung, sicherer Datenbankzugriff, ~/.ssh/config und autossh.

Website gehackt? Was Sie jetzt Schritt für Schritt tun sollten
Website gehackt? Was Sie jetzt tun sollten: Anzeichen, Sofortmaßnahmen, Passwörter, Schadcode finden, sauberes Backup, WordPress und Schutz vor Angriffen.