Wat is HSTS?
HSTS (HTTP Strict Transport Security) is een webbeveiligingsmechanisme dat browsers vertelt dat zij uitsluitend via HTTPS met een website mogen communiceren, nooit via HTTP. Zodra een browser een HSTS-header ziet, zet hij alle toekomstige verzoeken automatisch om naar HTTPS en weigert hij verbinding via gewone HTTP, zelfs wanneer de gebruiker expliciet http://. typt.
Waarom HSTS belangrijk is
Zelfs met een geldig SSL-certificaat bestaan er kwetsbaarheden:
SSL-strippingaanval
1. De gebruiker typt "example.com" zonder https://
2. De aanvaller onderschept het eerste HTTP-verzoek
3. De aanvaller gebruikt een proxy naar HTTPS, maar toont HTTP aan de gebruiker
4. De gebruiker denkt veilig te zijn, terwijl de aanvaller alles kan zien
HSTS voorkomt dit door ervoor te zorgen dat browsers dat eerste HTTP-verzoek nooit uitvoeren.
Voordelen van HSTS
- Voorkomt downgradeaanvallen: terugvallen op HTTP is niet mogelijk
- Beschermt bladwijzers: zelfs oude HTTP-bladwijzers worden HTTPS
- Elimineert gemengde inhoud: ook subresources worden tot HTTPS gedwongen
- Verbetert prestaties: HTTP-naar-HTTPS-omleidingen zijn niet nodig
Syntaxis van de HSTS-header
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Richtlijnen
| Richtlijn | Beschrijving |
|---|---|
| max-age | Aantal seconden dat HSTS wordt onthouden (31536000 = 1 jaar) |
| includeSubDomains | HSTS toepassen op alle subdomeinen |
| preload | Instemmen met opname in de preloadlijst van browsers |
HSTS implementeren
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Cloudflare
Schakel dit in via SSL/TLS → Edge Certificates → HTTP Strict Transport Security
Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
HSTS-preloadlijst
De HSTS-preloadlijst is een lijst domeinen die hardcoded in browsers staat en uitsluitend via HTTPS mag worden benaderd. Daarmee wordt zelfs de kwetsbaarheid van het eerste HTTP-verzoek geëlimineerd.
Vereisten voor preload
1. Geldig SSL-certificaat
2. Alle HTTP naar HTTPS omleiden
3. HSTS-header met:
- max-age van ten minste 31536000 (1 jaar)
- de richtlijn includeSubDomains
- de richtlijn preload
4. Alle subdomeinen moeten HTTPS ondersteunen
Indienen bij de preloadlijst
1. Vereisten verifiëren: gebruik hstspreload.org voor controle
2. Domein indienen: voer het domein in op hstspreload.org
3. Opname afwachten: browserupdates kunnen weken tot maanden duren
Waarschuwingen voor preload
Preload is praktisch permanent. Verwijdering uit de lijst duurt maanden en vereist browserupdates. Gebruik preload alleen als u zeker weet dat alle subdomeinen HTTPS onbeperkt zullen ondersteunen.HSTS controleren
Browser DevTools:1. Open DevTools → tabblad Network
2. Laad de site
3. Controleer de responsheaders op Strict-Transport-Security
Via curl:curl -I https://example.com | grep -i strict
Via DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports hasHSTS in security details
Preloadstatus:
Controleer op hstspreload.org of een domein is voorgeladen.
Strategie voor HSTS-implementatie
Fase 1: Korte max-age
Begin met een korte max-age om te testen:
Strict-Transport-Security: max-age=300
Als er iets stukgaat, hebben gebruikers de waarde slechts 5 minuten gecachet.
Fase 2: Duur verhogen
Nadat u hebt bevestigd dat HTTPS overal werkt:
Strict-Transport-Security: max-age=86400
Fase 3: Subdomeinen toevoegen
Zodra alle subdomeinen HTTPS ondersteunen:
Strict-Transport-Security: max-age=2592000; includeSubDomains
Fase 4: Volledige implementatie + preload
Na maanden stabiele werking:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Dien het domein daarna in bij de preloadlijst.
Veelvoorkomende HSTS-problemen
Subdomein zonder HTTPS: includeSubDomains verbreekt dat subdomein Ontwikkelomgevingen: HSTS uit productie kan lokale ontwikkeling breken wanneer het is gecachet CDN- of proxyheaders: zorg dat tussenliggende systemen de HSTS-header niet verwijderen Gemengde inhoud: alle resources moeten HTTPS gebruiken; HSTS repareert geen ingesloten HTTP-resourcesHSTS is essentieel voor elke website die gevoelige gegevens verwerkt en wordt sterk aanbevolen voor alle HTTPS-sites.