HTTP Strict Transport Security
Was geprüft
Gelesen wird die Kopfzeile Strict-Transport-Security (HSTS) der Endantwort über https://; ist sie mehrfach gesetzt, gilt wie im Browser nur die erste. Erwartet wird ein max-age von mindestens 180 Tagen (15552000 Sekunden). includeSubDomains und preload erscheinen nur als Information. Kam die Endantwort nicht über https://, trifft der Punkt nicht zu.
Wie relevant
Mittel, wenn die Kopfzeile fehlt, kein gültiges max-age hat oder max-age=0 HSTS abschaltet. Niedrig, wenn max-age unter 180 Tagen liegt. Mittel und nicht höher, weil die Weiterleitung auf https:// den größten Teil des Schutzes schon leistet; HSTS schließt die Lücke beim allerersten unverschlüsselten Aufruf.
Warum
HSTS weist den Browser an, die Domain für die angegebene Zeit nur noch über https:// aufzurufen, auch wenn jemand http:// eintippt oder einem alten Link folgt. Damit entfällt der unverschlüsselte erste Schritt, den Dritte im selben Netz abfangen könnten.
Wie beheben
Setzen Sie Strict-Transport-Security mit max-age=31536000 (ein Jahr). Beginnen Sie bei Unsicherheit mit einem kurzen Wert wie 300 Sekunden und erhöhen Sie ihn, wenn alles funktioniert. includeSubDomains nur ergänzen, wenn wirklich jede Subdomain über https:// erreichbar ist.
Nebenwirkung: Solange max-age läuft, ist die Domain im Browser nur noch über https:// erreichbar; ein späteres Zertifikatsproblem lässt sich nicht mehr wegklicken. preload ist kaum umkehrbar: Die Aufnahme in die Preload-Liste der Browser zurückzunehmen dauert Monate, und bis dahin gilt HSTS für alle Subdomains. Setzen Sie preload erst nach längerem Betrieb mit includeSubDomains und bewusster Entscheidung.
WordPress: Viele Sicherheits-Plugins bieten eine HSTS-Option. Aktivieren Sie sie entweder dort oder in der Serverkonfiguration, nicht an beiden Stellen. Sicherheits- und Cache-Plugins schreiben die .htaccess oft selbst um und können eigene Kopfzeilen dabei entfernen oder doppelt setzen. Setzen Sie Kopfzeilen deshalb an genau einer Stelle (Plugin oder .htaccess außerhalb der Plugin-Blöcke „# BEGIN … # END“) und prüfen Sie nach jedem Plugin-Update mit curl -I.
Codebeispiel
Apache (.htaccess, mod_headers)
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
</IfModule>nginx
# Im HTTPS-Serverblock. Achtung: add_header in einem location-Block
# ersetzt alle add_header-Zeilen der übergeordneten Ebene.
add_header Strict-Transport-Security "max-age=31536000" always;Cloudflare (Einstellung)
SSL/TLS → Edge-Zertifikate → HTTP Strict Transport Security (HSTS) aktivieren
Max-Age: 12 Monate; „Include subdomains“ und „Preload“ nur nach bewusster Entscheidung.Weiterführende Quellen
Quellen der Methodik
docs/SCORING.md— Status und Schweregrade (§2), Kategoriescore und Abdeckung (§3), Gesamtwert (§4), keine Doppelabzüge (§5), Prüfkatalog mit Gewichten (§6), Versionierung (§8), Formulierungsregeln (§9), bewusst nicht geprüft (§10)docs/KALIBRIERUNG.md— Abgleich der Schwerefaktoren und Kappen mit externen Ankern (Web Almanac, Lighthouse, MDN HTTP Observatory, SSL Labs), Entscheidung scoring@1.4.0