Protokolle im Klartext, z. B. HTTP, können anfällig für Abhörangriffe sein, bei denen ein Angreifer die übertragenen Inhalte lesen kann. Mit Transport Layer Security (TLS) kann der Traffic verschlüsselt werden. Dadurch wird es für Angreifer erheblich schwieriger, diese Daten zu verwenden, wenn sie abgefangen werden.
Angreifer können TLS jedoch umgehen, indem sie verschlüsselte Verbindungen dazu zwingen, HTTP im Klartext zu verwenden. Um dieses Problem zu beheben, können Sie den Antwortheader HTTP Strict Transport Security (HSTS) verwenden. HSTS zwingt den Browser des Nutzers, eine Website über TLS aufzurufen, und lässt für einen bestimmten Zeitraum kein Fallback auf Klartext-HTTP zu.
So schlägt die Lighthouse-Prüfung fehl
Bei der Prüfung werden die folgenden Probleme mit dem HSTS-Header gemeldet:
- Wenn überhaupt kein HSTS-Header gefunden wird.
- Wenn eine der empfohlenen Anweisungen fehlt (
max-age,includeSubDomains,preload) - Wenn die Dauer für die
max-age-Anweisung weniger als ein Jahr (31.536.000 Sekunden) beträgt. - Wenn beim Parsen des Headers ein Syntaxfehler auftritt, z. B. eine unbekannte Direktive.
Wirkungsvolle HSTS-Richtlinie konfigurieren
Die optimale HSTS-Headerkonfiguration sieht so aus:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- Mit der Direktive
max-agewird die Zeit in Sekunden angegeben, in der der Browser des Nutzers eine Website nur über TLS aufrufen darf. Nach Ablauf der Zeit können Nutzer die Website wieder über HTTP aufrufen, wenn die Website keinen HSTS-Header (oder keine temporären Weiterleitungen von HTTP zu HTTPS) bereitstellt. - Wenn Sie die
includeSubDomains-Anweisung festlegen, wird die Kopfzeile für alle Subdomains der Seiten-URL erzwungen, von der die Kopfzeile ursprünglich gesendet wurde. Wenn beispielsweise ein HSTS-Header vongoogle.comgesendet wird, der die AnweisungincludeSubDomainsenthält, wird der HSTS-Header fürmail.google.comerzwungen. - Wenn Sie die
preload-Anweisung festlegen und die Domain an den HSTS-Vorabladedienst senden, wird die Domain in Browser-Binärdateien kompiliert, die die vorab geladene HSTS-Liste verwenden. Das gilt nicht nur für Google Chrome.
Die Einführung des HSTS-Headers ist mit einigen Risiken verbunden. Alle Funktionen, die eine unverschlüsselte HTTP-Verbindung erfordern, wären für den in der max-age-Anweisung festgelegten Zeitraum nicht verfügbar. Wenn die preload-Anweisung angewendet wird, kann es sogar noch länger dauern.
Um die mit der Einführung verbundenen Risiken zu minimieren, wird ein stufenweiser Ansatz empfohlen:
Beginnen Sie mit einem kleinen
max-ageund fügen Sie nurincludeSubDomainshinzu (keinpreload):max-age=3600; includeSubDomainsWenn nach einer Wartezeit (z. B. einer Woche) keine Probleme gemeldet werden, erhöhe die
max-age. Beispiel:max-age=604800; includeSubDomainsWenn diese erste Phase über einen längeren Zeitraum (z. B. drei Monate) erfolgreich ist, sollten die Website und ihre Subdomains der HSTS-Preload-Liste hinzugefügt und die
preload-Anweisung hinzugefügt werden.max-age=63072000; includeSubDomains; preload