Vad är HSTS?
HSTS (HTTP Strict Transport Security) är en webbsäkerhetsmekanism som talar om för webbläsare att en webbplats endast får användas via HTTPS, aldrig HTTP. När en webbläsare har sett en HSTS-rubrik uppgraderar den automatiskt alla framtida begäranden till HTTPS och vägrar ansluta via vanlig HTTP, även om användaren uttryckligen skriver http://.
Varför HSTS är viktigt
Även med ett giltigt SSL-certifikat finns sårbarheter:
SSL-strippningsattack
1. Användaren skriver "example.com" (utan https://)
2. Angriparen fångar den första HTTP-begäran
3. Angriparen proxar till HTTPS men visar HTTP för användaren
4. Användaren tror att anslutningen är säker, men angriparen ser allt
HSTS förhindrar detta genom att säkerställa att webbläsare aldrig skickar den första HTTP-begäran.
Fördelar med HSTS
- Förhindrar nedgraderingsattacker: Ingen återgång till HTTP är möjlig
- Skyddar användarnas bokmärken: Även gamla HTTP-bokmärken blir HTTPS
- Eliminerar blandat innehåll: Även underresurser tvingas använda HTTPS
- Förbättrar prestandan: Ingen HTTP→HTTPS-omdirigering behövs
HSTS-rubrikens syntax
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Direktiv
| Direktivet | Beskrivning |
|---|---|
| max-age | Antal sekunder som HSTS ska kommas ihåg (31536000 = 1 år) |
| includeSubDomains | Tillämpa HSTS på alla underdomäner |
| preload | Godkänn att domänen tas med i webbläsarnas förinläsningslista |
Implementera HSTS
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
Aktivera under 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-förinläsningslista
HSTS-förinläsningslistan är en lista över domäner som är inbyggd i webbläsare och som endast får nås via HTTPS. Den eliminerar även sårbarheten med den första HTTP-begäran.
Krav för förinläsning
1. Giltigt SSL-certifikat
2. Omdirigera all HTTP-trafik till HTTPS
3. HSTS-rubrik med:
- max-age på minst 31536000 (1 år)
- direktivet includeSubDomains
- direktivet preload
4. Alla underdomäner måste stödja HTTPS
Skicka in till förinläsningslistan
1. Verifiera kraven: Använd hstspreload.org för att kontrollera
2. Skicka in domänen: Ange domänen på hstspreload.org
3. Vänta på att den tas med: Det tar veckor till månader innan webbläsaruppdateringar sprids
Varningar om förinläsning
Förinläsning är permanent (i praktiken). Det tar månader att ta bort en domän från listan och kräver webbläsaruppdateringar. Lägg bara till en domän om du är säker på att alla underdomäner kommer att stödja HTTPS utan tidsbegränsning.Kontrollera HSTS
Webbläsarens utvecklarverktyg:1. Öppna utvecklarverktygen → fliken Network
2. Ladda webbplatsen
3. Kontrollera svarsrubrikerna efter Strict-Transport-Security
Med curl:curl -I https://example.com | grep -i strict
Med DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports hasHSTS in security details
Status för förinläsning:
Kontrollera hstspreload.org för att se om en domän är förinläst.
Strategi för HSTS-driftsättning
Fas 1: Kort max-age
Börja med ett kort max-age för att testa:
Strict-Transport-Security: max-age=300
Om något går sönder har användarna bara cachelagrat inställningen i 5 minuter.
Fas 2: Förläng varaktigheten
När du har bekräftat att HTTPS fungerar överallt:
Strict-Transport-Security: max-age=86400
Fas 3: Lägg till underdomäner
När alla underdomäner stöder HTTPS:
Strict-Transport-Security: max-age=2592000; includeSubDomains
Fas 4: Full driftsättning med förinläsning
Efter flera månaders stabil drift:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Skicka sedan in domänen till förinläsningslistan.
Vanliga HSTS-problem
Underdomän utan HTTPS: includeSubDomains gör att den underdomänen slutar fungera Utvecklingsmiljöer: HSTS som cachelagrats från produktionen gör lokal utveckling obrukbar CDN-/proxy-rubriker: Säkerställ att HSTS-rubriken inte tas bort av mellanhänder Blandat innehåll: Alla resurser måste använda HTTPS, HSTS reparerar inte inbäddade HTTP-resurserHSTS är avgörande för alla webbplatser som hanterar känsliga data och rekommenderas starkt för alla HTTPS-webbplatser.