HSTS und Sicherheits-Header für Ihre Website
Bei jeder Seite sendet Ihr Webserver Header mit: kurze Zeilen mit Anweisungen für den Browser. Sie bestimmen zum Teil, wie sicher der Browser mit Ihrer Website umgeht. Hier lesen Sie, was HSTS ist, welche anderen Sicherheitsheader es gibt und wie Sie diese einstellen und testen.
Zuerst muss Ihre Website ein funktionierendes Zertifikat haben und Besucher zu https weiterleiten. Das lesen Sie unter SSL-Zertifikat aktivieren, erneuern und Probleme lösen und Besucher verpflichtend zu https weiterleiten.
Was macht HSTS?
Die Weiterleitung zu https hat einen schwachen Moment: Die erste Anfrage über http geht noch unverschlüsselt. Jemand im selben Netzwerk, zum Beispiel in einem öffentlichen WLAN, kann diese Anfrage abfangen. HSTS (HTTP Strict Transport Security) löst das. Ihre Website sendet über https diesen Header mit:
Strict-Transport-Security: max-age=31536000
Der Browser merkt sich dann, dass er Ihre Website nur über https öffnen darf. Tippt ein Besucher später http:// ein, macht der Browser selbst https daraus, noch bevor etwas über das Netzwerk geht. Einen HSTS-Header, der über normales http ankommt, ignoriert der Browser.
| Bestandteil | Bedeutung |
|---|---|
max-age | Wie lange der Browser es sich merkt, in Sekunden. Der Test von internet.nl rechnet mindestens ein Jahr (31536000) als ausreichend. |
includeSubDomains | Gilt auch für alle Subdomains, wie shop.ihredomain.de und mail.ihredomain.de. |
preload | Sie beantragen die Aufnahme in die Liste, die in Browser eingebaut ist (hstspreload.org). Dann ist sogar der allererste Besuch geschützt. Dafür sind unter anderem ein Jahr, includeSubDomains und https auf allen Subdomains nötig. Wieder davon entfernt zu werden, dauert lange. |
max-age=0 | Löscht die gemerkte Anweisung wieder, beim nächsten Besuch über https. |
includeSubDomains gilt das auch für jede Subdomain, wie eine alte Kamera- oder Druckerseite ohne Zertifikat. Bauen Sie es deshalb schrittweise auf: beginnen Sie mit einer kurzen max-age, zum Beispiel einem Tag (86400), prüfen Sie, ob alles funktioniert, und erhöhen Sie in Schritten auf ein Jahr.Der HSTS-Schalter in DirectAdmin
In DirectAdmin gehen Sie zu Domains und klicken Sie auf Ihren Domainnamen. Ist Secure SSL aktiviert, sehen Sie bei HSTS den Schalter HTTP Strict Transport Security aktivieren. Klicken Sie anschliessend auf Speichern, um zu speichern. Wie das Schritt für Schritt funktioniert, lesen Sie unter Besucher immer zu https weiterleiten.
Möchten Sie wissen, welche max-age Ihre Website mitsendet, schauen Sie in den Entwicklertools Ihres Browsers oder im Test von internet.nl (siehe unten) nach. Stellen Sie HSTS an einer Stelle ein: in DirectAdmin oder in .htaccess, nicht beides. Erhält der Browser zwei HSTS-Header, verwendet er nur den ersten.
Die anderen Sicherheitsheader
| Header | Wogegen | Startwert |
|---|---|---|
X-Content-Type-Options | Der Browser rät selbst, was eine Datei ist, wodurch ein hochgeladenes "Bild" als Skript ausgeführt werden kann. | nosniff (der einzige gültige Wert) |
Content-Security-Policy: frame-ancestors oder X-Frame-Options | Clickjacking: eine andere Website lädt Ihre Seite unsichtbar in einen Frame, sodass Besucher unbemerkt auf Ihre Schaltflächen klicken. | frame-ancestors 'self', oder der ältere Header X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Bei einem Klick zu einer anderen Website sendet der Browser die Adresse der vorherigen Seite mit, manchmal mit einem Suchbegriff oder einer Bestellnummer darin. | strict-origin-when-cross-origin, oder strenger same-origin oder no-referrer. Internet.nl rechnet nur die strengen Werte als gut. |
Permissions-Policy | Bestimmt, welche Browserfunktionen Ihre Seite und eingebettete Frames verwenden dürfen, wie Kamera, Mikrofon und Standort. | camera=(), microphone=(), geolocation=() schaltet diese drei aus. Verwendet Ihre Website eine dieser Funktionen, lassen Sie sie weg. |
Content-Security-Policy (vollständig) | Beschränkt, von welchen Stellen Skripte, Stile und Bilder geladen werden dürfen. Das macht eingefügte bösartige Skripte (XSS) viel schwieriger. | Massarbeit pro Website. Vermeiden Sie unsafe-inline, unsafe-eval und Wildcards. |
Einstellen in .htaccess
Setzen Sie diese Zeilen oben in die Datei .htaccess im Ordner public_html Ihrer Domain. Erstellen Sie zuerst eine Kopie der Datei.
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set Content-Security-Policy "frame-ancestors 'self'" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Nur wenn der HSTS-Schalter in DirectAdmin ausgeschaltet ist: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Fügen Sie includeSubDomains erst hinzu, wenn Sie sicher wissen, dass jede Subdomain https hat. Verwenden Sie WordPress, können Sie die Header auch mit einem Plugin einstellen. Wählen Sie ein bekanntes Plugin, das noch aktualisiert wird, und stellen Sie jeden Header an einer Stelle ein: im Plugin oder in .htaccess.
Content-Security-Policy-Report-Only. Dieser blockiert nichts, zeigt aber in der Konsole des Browsers, was blockiert würde. Überlassen Sie dies im Zweifel Ihrem Webentwickler, oder beginnen Sie nur mit frame-ancestors.Testen
- Internet.nl: geben Sie Ihre Domain beim Websitetest auf internet.nl ein.
- Ihr Browser: öffnen Sie Ihre Website, drücken Sie F12 (oder wählen Sie Untersuchen), gehen Sie zum Tab Netzwerk, laden Sie die Seite neu und klicken Sie auf die erste Anfrage. Unter Antwortheader (Response Headers) sehen Sie alles, was Ihr Server mitsendet.
- Die Befehlszeile:
curl -sI https://ihredomain.de/zeigt die Header an.
Prüfen Sie nach jeder Änderung, ob Ihre Website, Formulare und Bezahlseite noch funktionieren. Halten Sie ausserdem Ihr CMS, Plugins und Themes aktuell. Siehe wp-login.php von WordPress absichern.
Weiterführende Informationen
- MDN: Strict-Transport-Security (Englisch)
- MDN: Content-Security-Policy (Englisch)
- MDN: Permissions-Policy (Englisch)
- HSTS-Preload-Liste (Englisch)
