Modul 4 · 4.2
Deutsch
Ihre Website: https, HSTS und Sicherheitsheader
Modul 4: E-Mail, Website und Domain · Lesezeit: 11 Minuten
Lernziel: Nach dieser Lektion können Sie die Grundsicherheit Ihrer Website überprüfen: ein gültiges Zertifikat, die Weiterleitung auf https, HSTS mit einer passenden max-age, die wichtigsten Sicherheitsheader und die Aktualisierung Ihres CMS.
Kernbegriffe: TLS-Zertifikat, https, Weiterleitung auf https, HSTS, max-age, includeSubDomains, preload, HTTP-Header, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Was passiert, wenn jemand Ihre Website öffnet
Gibt ein Kunde example.com in die Adressleiste ein, fragt der Browser die Seite bei Ihrem Webserver an. Dieses Gespräch läuft über HTTP. Bei https liegt eine verschlüsselte Verbindung darum herum: TLS. Dafür benötigt Ihre Website ein TLS-Zertifikat (oft noch SSL-Zertifikat genannt). Das Zertifikat belegt, dass der Server wirklich zu example.com gehört, und die Verschlüsselung sorgt dafür, dass niemand unterwegs mitlesen oder etwas verändern kann. Das ist wichtig bei öffentlichem WLAN, bei dem Sie nicht wissen, wer das Netzwerk verwaltet (Lektion 5.3).
Bei jeder Antwort schickt der Server zusätzlich zur eigentlichen Seite eine Reihe von Headern mit: kurze Zeilen mit Informationen und Anweisungen für den Browser. Sie sehen sie nicht auf dem Bildschirm, aber sie bestimmen zu einem großen Teil, wie sicher der Browser mit Ihrer Website umgeht. Ein Teil dieser Header sind Sicherheitsheader. In dieser Lektion gehen wir die vier Ebenen durch: Zertifikat, Weiterleitung, HSTS und Header. Danach werfen wir kurz einen Blick auf die Aktualisierung Ihrer Website selbst.
Ebene 1: ein gültiges Zertifikat
Ein Zertifikat ist in Ordnung, wenn es drei Bedingungen erfüllt:
- es ist nicht abgelaufen;
- es wurde von einem vertrauenswürdigen Aussteller ausgestellt (einer Zertifizierungsstelle, die die Browser kennen, wie Let's Encrypt oder ein kommerzieller Anbieter);
- es gilt für genau den Namen, den der Besucher öffnet:
example.comundwww.example.com, wenn Sie beide verwenden.
Fast jeder Hostinganbieter richtet heutzutage ein kostenloses Zertifikat ein, das sich automatisch verlängert. Geht etwas schief, liegt das meist daran, dass der Domainname auf einen anderen Server zeigt oder dass ein CAA-Eintrag den Aussteller blockiert (Lektion 4.3).
Wichtig zu wissen: Ein Schlosssymbol sagt nichts über die Vertrauenswürdigkeit der Website aus. Es bedeutet nur, dass die Verbindung verschlüsselt ist und dass das Zertifikat zu dem Namen in der Adressleiste passt. Phishing-Seiten unter mijnbank-veilig.example haben genauso gut ein Schlosssymbol. Deshalb lernen Sie in Lektion 3.2, die Domain zu lesen.
Ebene 2: immer auf https weiterleiten
Ein Zertifikat allein reicht nicht. Wer http://example.com öffnet, zum Beispiel über einen alten Link oder indem er nur den Namen eingibt, muss automatisch zur https-Version gelangen. Das nennt man Weiterleitung (ein Redirect, meist mit Statuscode 301).
Eine saubere Reihenfolge ist:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (nur wenn Sie www als Hauptadresse verwenden)
http://www.example.com -> https://www.example.comAchten Sie auf die erste Zeile: Leiten Sie von http zuerst auf https unter demselben Namen weiter, erst danach gegebenenfalls auf www. So kann der Browser die HSTS-Anweisung des nackten Namens ebenfalls erhalten. Internet.nl prüft genau das.
Ein häufiger Fehler ist eine doppelte Weiterleitung: im Hosting-Panel und zusätzlich in einem Plugin oder in .htaccess. Das kann eine Endlosschleife erzeugen ("zu viele Weiterleitungen"). Verwenden Sie nur eine Stelle.
Ebene 3: HSTS
Die Weiterleitung hat einen schwachen Moment: Die allererste Anfrage läuft noch unverschlüsselt über http. Ein Angreifer im selben Netzwerk kann diese eine Anfrage abfangen und den Besucher auf einer nachgebauten, unverschlüsselten Version halten. Dafür gibt es HSTS (HTTP Strict Transport Security, RFC 6797).
Mit HSTS schickt Ihre Website über https einen Header mit:
Strict-Transport-Security: max-age=31536000; includeSubDomainsDer Browser merkt sich dann: "Diese Website nur über https öffnen, für die nächsten 31.536.000 Sekunden (ein Jahr)." Gibt der Besucher später http://example.com ein, macht der Browser selbst https daraus, noch bevor etwas über das Netzwerk geht. Die schwache erste Anfrage entfällt.
| Bestandteil | Bedeutung |
|---|---|
max-age= | Wie lange der Browser es sich merkt, in Sekunden. Internet.nl rechnet mindestens ein Jahr (max-age=31536000) als ausreichend; eine kurze Zeitspanne schützt Menschen nicht, die Ihre Website nur gelegentlich besuchen. |
includeSubDomains | Gilt auch für alle Subdomains, wie shop.example.com und mail.example.com. |
preload | Sie beantragen die Aufnahme in die Liste, die fest in Browser eingebaut ist (hstspreload.org). Dann ist sogar der allererste Besuch geschützt. Voraussetzungen sind unter anderem eine max-age von mindestens einem Jahr, includeSubDomains und alle Subdomains unter https. Das Entfernen aus der Liste dauert lange. |
max-age=0 | Löscht die gemerkte Anweisung wieder. |
Drei Dinge, die Sie wissen sollten, bevor Sie HSTS aktivieren:
- Https muss zuerst überall funktionieren. Ein Browser, der sich HSTS gemerkt hat und einen Zertifikatfehler feststellt, bietet dem Besucher keine Schaltfläche, um trotzdem fortzufahren (RFC 6797, Abschnitt 12.1). Läuft Ihr Zertifikat ab oder stimmt es nicht für
www, ist Ihre Website für diese Besucher unerreichbar, bis das Problem behoben ist. includeSubDomainsbetrifft alles unter Ihrer Domain. Eine alte Subdomain ohne Zertifikat, zum Beispiel eine Drucker- oder Kameraseite untercamera.example.com, lässt sich danach nicht mehr öffnen.- Bauen Sie es schrittweise auf. Beginnen Sie mit einer kurzen
max-age(zum Beispiel einen Tag), prüfen Sie, ob alles funktioniert, und erhöhen Sie schrittweise auf ein Jahr. Warten Sie bei jedem Schritt die gesamte Zeitspanne ab.
Einen HSTS-Header, der über gewöhnliches http ankommt, ignoriert der Browser. Sie sehen ihn also nur in der https-Antwort.
Ebene 4: Sicherheitsheader
Neben HSTS gibt es einige Header, die dem Browser mitteilen, was er mit Ihren Seiten tun darf und was nicht. Sie müssen nicht alle perfekt beherrschen, aber die ersten drei sind einfach und ohne Risiko.
| Header | Wogegen | Guter Wert |
|---|---|---|
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 einen Frame und lässt Besucher unbemerkt auf Ihre Schaltflächen klicken. | frame-ancestors 'self' oder 'none'; der ältere Header X-Frame-Options: SAMEORIGIN oder DENY |
Referrer-Policy | Bei einem Klick auf eine andere Website schickt der Browser die Adresse der vorherigen Seite mit. Darin können sensible Informationen stehen, etwa ein Suchbegriff oder eine Bestellnummer. | no-referrer oder same-origin (streng), strict-origin-when-cross-origin (üblich, internet.nl gibt hier eine Warnung aus) |
Content-Security-Policy (vollständig) | Begrenzt, von welchen Stellen aus Skripte, Stile und Bilder geladen werden dürfen. Erschwert eingeschleuste bösartige Skripte (XSS) erheblich. | Individuell pro Website. Vermeiden Sie unsafe-inline, unsafe-eval und Wildcards. |
Eine vollständige Content-Security-Policy ist am wirkungsvollsten, aber auch am schwierigsten umzusetzen: Eine zu strenge Regel kann Ihre Statistiken, Ihre Zahlungsschaltfläche oder Ihr Chatfenster lahmlegen. Mit der Variante Content-Security-Policy-Report-Only können Sie zunächst messen, was blockiert würde, ohne etwas zu beschädigen. Überlassen Sie dies Ihrem Webentwickler oder beginnen Sie nur mit frame-ancestors.
Header selbst ansehen
Öffnen Sie Ihre Website in einem Browser, 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 der Server mitschickt. Über die Befehlszeile geht es auch:
curl -sI https://example.com/Die Website selbst: CMS, Plugins und Themes
Die besten Header helfen nichts, wenn die Software hinter Ihrer Website Sicherheitslücken hat. Die meisten gehackten Websites kleiner Unternehmen wurden nicht über den Webserver kompromittiert, sondern über ein veraltetes Plugin, ein Theme, das seit Jahren nicht mehr aktualisiert wurde, oder ein schwaches Administratorpasswort.
- Aktivieren Sie automatische Updates für Ihr CMS (zum Beispiel WordPress, Joomla oder ein anderes System) und für Plugins, wo das möglich ist.
- Entfernen Sie Plugins und Themes, die Sie nicht verwenden; deaktiviert reicht nicht, die Dateien liegen weiterhin auf dem Server.
- Verwenden Sie für den Administrator-Login ein starkes, einzigartiges Passwort und Zwei-Faktor-Authentifizierung (Modul 2), und begrenzen Sie die Anzahl der Anmeldeversuche.
- Halten Sie die PHP-Version (oder eine andere Sprache) Ihres Pakets auf einem Stand, der noch Updates erhält (Lektion 5.1).
In der Praxis: so sieht es aus
In DirectAdmin, dem Panel, das WebOké verwendet, aktivieren Sie bei Ihrer Domain zuerst Sicheres SSL und danach SSL mit https-Weiterleitung erzwingen. An derselben Stelle befindet sich ein Schalter für HSTS; aktivieren Sie ihn erst, wenn das Zertifikat für alle Namen funktioniert. Bei anderen Anbietern funktioniert es ähnlich, oder Sie regeln es in den Einstellungen Ihres CMS.
Läuft Ihre Website auf Apache oder LiteSpeed, können Sie die Header auch in .htaccess setzen:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
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"
</IfModule>Fügen Sie includeSubDomains erst hinzu, wenn Sie sicher sind, dass jede Subdomain https hat. Prüfen Sie nach jeder Änderung mit dem Websitetest von internet.nl oder mit den Entwicklertools Ihres Browsers.
Zusammenfassung
- Ein Schlosssymbol bedeutet: verschlüsselt und der richtige Name. Es bedeutet nicht: vertrauenswürdig.
- Leiten Sie http immer auf https weiter, zuerst unter demselben Namen, und an nur einer Stelle.
- HSTS lässt den Browser merken, dass Ihre Website nur über https läuft; internet.nl rechnet eine
max-agevon mindestens einem Jahr (31536000) als gut. Aktivieren Sie es erst, wenn https überall funktioniert, und bauen Sie es schrittweise auf. X-Content-Type-Options: nosniff,frame-ancestors(oderX-Frame-Options) undReferrer-Policysind einfach umzusetzen; eine vollständige Content-Security-Policy ist individuell.- Updates Ihres CMS, Ihrer Plugins und Themes sind mindestens so wichtig wie Header.
Quiz
Aufgabe
Aufgabe A4.2: Https, HSTS und Header Ihrer Website überprüfen. Geben Sie den Domainnamen Ihrer Website ein (haben Sie keine, verwenden Sie internet.nl). Das Programm öffnet http:// und https:// Ihrer Domain und prüft das Zertifikat, die Weiterleitung auf https, HSTS und die Sicherheitsheader. Sie erhalten pro Punkt Grün, Orange oder Rot mit Erklärung.
Aufgabe D4.2: Ihre Website aktualisieren und aufräumen. Melden Sie sich in der Verwaltung Ihrer Website an, prüfen Sie die Version Ihres CMS, Ihrer Plugins und Themes, entfernen Sie, was Sie nicht verwenden, und aktivieren Sie automatische Updates, wo das möglich ist. Haken Sie die Checkliste ab und beantworten Sie die Reflexionsfrage.
Aufgabe D4.2: Ihre Website aktualisieren und aufräumen
So gehen Sie vor: (1) Melden Sie sich in der Verwaltung Ihrer Website an (oder bitten Sie Ihren Webentwickler, dies gemeinsam mit Ihnen zu tun). (2) Notieren Sie die Version Ihres CMS und prüfen Sie, ob Updates bereitstehen. (3) Erstellen Sie ein Backup (Lektion 6.1), installieren Sie die Updates von CMS, Plugins und Themes. (4) Entfernen Sie Plugins und Themes, die Sie nicht verwenden. (5) Aktivieren Sie automatische Updates, wo das möglich ist. (6) Prüfen Sie, welche Administratorkonten es gibt, und entfernen Sie Konten von Personen, die nicht mehr für Sie tätig sind. (7) Aktivieren Sie die Zwei-Faktor-Authentifizierung (2FA) für jedes Administratorkonto.
Ihre Haken und Notizen bleiben nur in diesem Browser; wir senden sie nirgendwohin. Sind Sie angemeldet, speichern wir in Meine Kurse nur, dass Sie die Aufgabe erledigt haben.
Weiterführende Informationen
Die Schritte in den WebOké-Artikeln gelten für die Umgebung von WebOké; bei anderen Anbietern funktioniert es ähnlich.
- SSL-Zertifikat aktivieren, erneuern und Probleme beheben
- Besucher zwingend zu https weiterleiten
- DirectAdmin Anleitung 6.4: Besucher immer zu https weiterleiten
- DirectAdmin Anleitung 6.7: Kein Schloss oder „nicht sicher“: Mixed Content beheben
- DirectAdmin Anleitung 15.10: Web Application Firewall
- wp-login.php in WordPress absichern
- Internet.nl, Websitetest (unabhängig): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- HSTS-Preload-Liste: https://hstspreload.org
- MDN, Erklärung der Header (Englisch): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
