Door Anoniem: HSTS is riskant. Eén configuratie foutje op een (sub-)domein, en je kunt gelijk een nieuwe domeinnaam gaan zoeken.
FUD. Niemand verplicht je om de directive IncludeSubDomains te gebruiken, en bij twijfel of je alles voor elkaar heb kun je met een korte TTL (Time To Live) van bijv. 86400 seconden (24 uur) of nog korter beginnen.
Door Anoniem: Het ligt aan de browsers. Die bakken in een nieuwe versie mee welke sites https zijn.
Gewoon niet waar. Je moet
zelf jouw site opgeven voor de "HSTS preload list" en je schijnt er best moeite voor te moeten doen om op die lijst te komen. Als je de "preload" directive weglaat in jouw HSTS headers, kom je echt niet spontaan op die lijst.
HSTS heeft wel een ander nadeel: het maakt tracking van gebruikers mogelijk. Maar ik denk dat dit nadeel niet opweegt tegen het voordeel, nl. dat het SSL-strip (AKA TLS-strip) aanvallen meestal lastiger maakt.
Voorwaarde daarbij is dat je ook redirects goed configureert (iets dat ook bij veel top-Alexa sites fout gaat). Ik beschrijf eerst het http verleden:
Gegeven: de meeste website domeinnamen beginnen met www. (of een ander voorvoegsel) zoals www.example.com.
Probleem: iedereen adverteert met "example.com" dus dat is wat 99,9% (gokje, overdreven wellicht) van de surfers in hun URL balk invoert. De browser zal dan een DNS lookup doen van "example.com" en, als er een IP-adres als antwoord ontvangen wordt, een TCP verbinding opzetten naar poort 80 (http) op dat IP-adres, onder vermelding van "verbind mij met http://example.com/".
Fix: maak (naast http://www.example.com/) een
tweede webserver, http://example.com/, die de browser van de bezoeker doorstuurt naar http://www.example.com/ (middels een redirect, aangegeven met "->"):
Dus: http://example.com/ -> http://www.example.com/
Toen kwam het https tijdperk.
Probleem: browsers gaan er -helaas- nog steeds vanuit dat je http bedoelt als je geen andere protocol identifier intikt. En van http wilden we nou juist af omdat het zo kwetsbaar is voor afluisteren en manipulatie door MITM (Man In The Middle) aanvallers - een koud kunstje op bijv. public WiFi of als jouw router gehacked is (voorbeeld:
https://www.security.nl/posting/575748/Gehackte+MikroTik-routers+sturen+verkeer+door+naar+aanvallers). En 99.9% van de gebruikers tikt geen https:// vóór de afgekorte URL's die zij intikken (zie
https://www.security.nl/posting/564452/https+voor+leken). Kortom, gebruikers tikken nog steeds "example.com" en browsers maken daar nog steeds http://example.com/ van.
Een deel van de site admins die op https overstappen, implementeert helemaal geen HSTS headers (m.i. onverstandig). Verreweg de meeste site admins die hun sites
wel HSTS headers laten meezenden, gebruiken hun hersens niet en vergeten een cruciaal aspect (Alexa top 50, maar ook belangrijke/veelbezochte sites in NL, zie
https://www.security.nl/posting/566101/NL%3A+veel+brakke+https+sites). Want hun setup is meestal zo dat de browser
geen HSTS header ontvangt van de site waar zij de domeinnaam van intikken, waardoor zij
elke keer opnieuw kwetsbaar zijn voor MITM aanvallen (zie de laatstgenoemde URL voor meer info).
TLDR:FOUT: http://example.com/ ->
https://www.example.com/ [+ HSTS header]
De browser ontvangt zo geen HSTS header van example.com. Beide volgende oplossingen zijn goed:
1) http://example.com/ ->
https://example.com/ [+ HSTS hdr] ->
https://www.example.com/ [+ HSTS hdr]
2) http://example.com/ ->
https://www.example.com/ [+ HSTS hdr] + get
https://example.com/1x1.gif [+ HSTS hdr]
P.S. een HSTS header die je meestuurt vanaf een http site wordt door de browser genegeerd (omdat deze voor een ander protocol bedoeld is, en omdat een MITM aanvaller zo'n header eenvoudig on-the-fly kan verwijderen uit een http antwoord, maar niet uit een https antwoord - dat versleuteld is
en wijzigingen in de "stream" hoort te detecteren en melden).