HSTS und Sicherheitsheader 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 erfahren Sie, was HSTS ist, welche anderen Sicherheitsheader es gibt und wie Sie diese einstellen und testen.
Zunächst 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 verläuft 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.nl und mail.ihredomain.nl. |
preload | Sie beantragen die Aufnahme in die Liste, die in Browsern 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 erforderlich. Wieder herauskommen 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 daher stufenweise auf: Beginnen Sie mit einer kurzen max-age, zum Beispiel einem Tag (86400), kontrollieren Sie, ob alles funktioniert, und erhöhen Sie schrittweise auf ein Jahr.HSTS bei WebOké
Auf den meisten unserer Server sendet der Webserver HSTS standardmässig für jede Website mit, die über https geöffnet wird: Strict-Transport-Security: max-age=31536000. Das ist ein Jahr, ohne includeSubDomains und ohne preload. Dafür müssen Sie nichts tun. Auf einigen Servern ist es nicht standardmässig aktiviert, dort aktivieren Sie es selbst. Ob Ihre Website HSTS bereits mitsendet und mit welcher max-age, sehen Sie in den Entwicklertools Ihres Browsers oder im Test von internet.nl (siehe unten).
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 danach auf Bearbeiten, um zu speichern. Wie das Schritt für Schritt funktioniert, lesen Sie unter Besucher immer zu https weiterleiten.
Sendet Ihre Website bereits HSTS mit, brauchen Sie den Schalter nicht. Aktivieren Sie ihn nur, wenn Ihre Website noch kein HSTS sendet. 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 | Wert, mit dem Sie beginnen können |
|---|---|---|
X-Content-Type-Options | Der Browser rät selbst, um was für eine Datei es sich handelt, 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 einem 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 nutzen dürfen, wie Kamera, Mikrofon und Standort. | camera=(), microphone=(), geolocation=() schaltet diese drei aus. Nutzt Ihre Website eine dieser Funktionen, lassen Sie sie weg. |
Content-Security-Policy (vollständig) | Beschränkt, von welchen Orten Skripte, Stile und Bilder laden dürfen. Das macht eingeschleuste bösartige Skripte (XSS) deutlich schwieriger. | Individuell 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 Ihre Website noch kein HSTS mitsendet (siehe oben): # 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. Nutzen 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 Zweifelsfall 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.nl/zeigt die Header.
Kontrollieren Sie nach jeder Änderung, ob Ihre Website, Formulare und Zahlungsseite 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)
Möchten Sie mehr erfahren? Besuchen Sie den kostenlosen WordPress-Kurs, Lektion 7.4 Die Website härten: Berechtigungen, Header und Sicherheits-Plugins.
