Protocollen in platte tekst, zoals HTTP, kunnen kwetsbaar zijn voor afluisteraanvallen waarbij een aanvaller de verzonden inhoud kan lezen. Gelukkig kan Transport Layer Security (TLS) het verkeer versleutelen en het voor aanvallers aanzienlijk moeilijker maken om deze gegevens te gebruiken als ze worden vastgelegd.
Het is echter mogelijk voor aanvallers om TLS te omzeilen door gecodeerde verbindingen te dwingen HTTP in platte tekst te gebruiken. Om dit probleem aan te pakken, is de HTTP Strict Transport Security (HSTS) -antwoordheader geïntroduceerd, die de browser van de gebruiker dwingt een website te bezoeken die alleen gebruikmaakt van TLS en niet terugvalt op HTTP in platte tekst (gedurende een bepaalde tijd).
Hoe de Lighthouse-audit mislukt
Tijdens de audit worden de volgende problemen met de HSTS-header gemarkeerd:
- Als er helemaal geen HSTS-header wordt gevonden.
- Als een van de aanbevolen richtlijnen ontbreekt (
max-age
,includedSubDomains
,preload
) - Als de duur van de richtlijn voor
max-age
minder dan één jaar bedraagt (31536000 seconden). - Als er een syntaxisfout optreedt bij het parseren van de header, zoals een onbekende richtlijn.
Configureer een krachtig HSTS-beleid
De optimale HSTS-headerconfiguratie ziet er als volgt uit:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- De
max-age
-richtlijn specificeert de hoeveelheid tijd dat de browser van de gebruiker wordt gedwongen een website te bezoeken die alleen gebruik maakt van TLS (in seconden). Na die tijd is het weer mogelijk om de site te bereiken via gewone HTTP als er geen HSTS-header door de website wordt geleverd (of als er tijdelijke omleidingen van HTTP naar HTTPS aanwezig zijn). - Als u de
includeSubDomains
-richtlijn instelt, wordt de header afgedwongen op alle subdomeinen van de pagina-URL die de header aanvankelijk verzendt. Als u bijvoorbeeld een HSTS-header verzendt door google.com die deincludeSubDomains
-richtlijn bevat, wordt de HSTS-header ook afgedwongen op mail.google.com. - Als u de
preload
richtlijn instelt en het domein indient bij de HSTS-preload-service, wordt het domein gecompileerd in browserbinaire bestanden die de vooraf geladen HSTS-lijst gebruiken (niet alleen Google Chrome).
Er zijn enkele risico's verbonden aan het uitrollen van de HSTS-header. Alle functies die een niet-gecodeerde HTTP-verbinding vereisen, zouden effectief worden verbroken gedurende de tijd die is ingesteld in de max-age
-richtlijn. Mogelijk zelfs langer als de preload
-richtlijn wordt toegepast.
Om de risico's die aan de uitrol zijn verbonden te verminderen, wordt een gefaseerde aanpak aanbevolen:
Beginnen met een kleine
max-age
en alleenincludeSubDomains
toevoegen (geenpreload
):max-age=3600; includeSubDomains
Na een afkoelperiode (bijvoorbeeld een week) zonder gerapporteerde problemen, verhoogt u de
max-age
, bijvoorbeeld:max-age=604800; includeSubDomains
Als deze eerste fase gedurende een langere periode (bijvoorbeeld drie maanden) succesvol is, moeten de website en de subdomeinen worden toegevoegd aan de HSTS-preloadlijst en moet de
preload
-richtlijn worden toegevoegd.max-age=63072000; includeSubDomains; preload