Det finns mycket man kan göra för att förbättra säkerheten på en hemsida. I mitt fall ligger sidan bakom Cloudflare, vilket innebär att en del skydd redan finns tillgängliga. Det viktiga är att faktiskt slå på rätt funktioner och komplettera med några tydliga säkerhetsheaders.
Cloudflare
Det första jag ville säkerställa var att de grundläggande inställningarna i Cloudflare var rimliga:
- SSL mode: Full (strict)
- Always Use HTTPS: på
- Automatic HTTPS Rewrites: på
- DNSSEC: på
- HSTS aktiverat
Det är enkla inställningar, men de gör stor skillnad. Framför allt ser de till att sidan konsekvent använder HTTPS och att certifikatkedjan kontrolleras ordentligt.
Headers
Utöver Cloudflare-inställningarna har jag lagt till en _headers-fil i projektet. Där går det att sätta headers som skickas med varje svar från sidan.
Jag har lagt till bland annat:
X-Content-Type-OptionsReferrer-PolicyPermissions-PolicyContent-Security-PolicyCross-Origin-Opener-PolicyCross-Origin-Resource-Policy
Det här är inga magiska lösningar i sig, men tillsammans minskar de attackytan och gör det tydligare vad sidan tillåter och inte tillåter.
HSTS
HSTS är värt att lyfta separat, eftersom det ofta nämns men inte alltid förklaras så tydligt.
HSTS står för HTTP Strict Transport Security och betyder i praktiken att webbläsaren lär sig att en viss domän bara får laddas över HTTPS.
Strict-Transport-Security: max-age=63072000; includeSubDomainsDet innebär att webbläsaren under lång tid ska komma ihåg att domänen bara får användas via HTTPS.
Med includeSubDomains gäller samma regel även för subdomäner vilket är bra så länge man vet att alla subdomäner också ska använda HTTPS.
Nästa steg är ofta preload. Då ber man webbläsartillverkare att lägga in domänen i sina inbyggda HSTS-listor så att HTTPS krävs redan från första besöket.
Några praktiska slutsatser
- Använd HTTPS överallt
- Sätt tydliga säkerhetsheaders
- Håll sidan enkel
- Ladda så lite JavaScript som möjligt
- Undvik onödiga tredjepartsresurser