HSTS och säkerhetsheaders för din webbplats
Vid varje sida skickar din webbserver med headers: korta rader med instruktioner till webbläsaren. De avgör delvis hur säkert webbläsaren hanterar din webbplats. Här läser du vad HSTS är, vilka andra säkerhetsheaders som finns och hur du ställer in och testar dem.
Först måste din webbplats ha ett fungerande certifikat och skicka besökare till https. Det kan du läsa om i Aktivera, förnya och felsöka SSL-certifikat och Skicka besökare obligatoriskt vidare till https.
Vad gör HSTS?
Att skicka vidare till https har en svag punkt: den första begäran via http går fortfarande okrypterad. Någon på samma nätverk, till exempel på öppet wifi, kan avlyssna den begäran. HSTS (HTTP Strict Transport Security) löser det. Din webbplats skickar med denna header via https:
Strict-Transport-Security: max-age=31536000
Webbläsaren kommer då ihåg att den bara får öppna din webbplats via https. Skriver en besökare senare http://, gör webbläsaren själv om det till https, innan något skickas över nätverket. En HSTS-header som kommer in via vanligt http ignoreras av webbläsaren.
| Del | Betydelse |
|---|---|
max-age | Hur länge webbläsaren kommer ihåg det, i sekunder. Testet på internet.nl räknar minst ett år (31536000) som tillräckligt. |
includeSubDomains | Gäller också alla underdomäner, som shop.dindomän.nl och mail.dindomän.nl. |
preload | Du begär upptagning i listan som är inbyggd i webbläsare (hstspreload.org). Då är även det allra första besöket skyddat. Det krävs bland annat ett år, includeSubDomains och https på alla underdomäner. Att komma av listan igen tar lång tid. |
max-age=0 | Raderar den sparade instruktionen igen, vid nästa besök via https. |
includeSubDomains gäller det också för varje underdomän, som en gammal kamera- eller skrivarsida utan certifikat. Bygg därför upp det stegvis: börja med en kort max-age, till exempel en dag (86400), kontrollera att allt fungerar och höj stegvis till ett år.HSTS-omkopplaren i DirectAdmin
I DirectAdmin går du till Domains och klickar på ditt domännamn. Är Secure SSL påslaget ser du vid HSTS omkopplaren Enable HTTP Strict Transport Security. Klicka sedan på Save för att spara. Hur det går steg för steg kan du läsa i Skicka alltid besökare till https.
Vill du veta vilken max-age din webbplats skickar med, titta då i utvecklarverktygen i din webbläsare eller i testet på internet.nl (se nedan). Ställ in HSTS på ett ställe: i DirectAdmin eller i .htaccess, inte båda. Får webbläsaren två HSTS-headers, använder den bara den första.
De övriga säkerhetsheaderna
| Header | Mot vad | Värde att börja med |
|---|---|---|
X-Content-Type-Options | Webbläsaren gissar själv vad en fil är, vilket gör att en uppladdad "bild" kan köras som ett skript. | nosniff (det enda giltiga värdet) |
Content-Security-Policy: frame-ancestors eller X-Frame-Options | Clickjacking: en annan webbplats laddar din sida osynligt i en frame, så att besökare omärkt klickar på dina knappar. | frame-ancestors 'self', eller den äldre headern X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Vid ett klick till en annan webbplats skickar webbläsaren med adressen till föregående sida, ibland med en sökterm eller ordernummer i. | strict-origin-when-cross-origin, eller strängare same-origin eller no-referrer. Internet.nl räknar bara de strikta värdena som godkända. |
Permissions-Policy | Avgör vilka webbläsarfunktioner din sida och inbäddade frames får använda, som kamera, mikrofon och plats. | camera=(), microphone=(), geolocation=() stänger av dessa tre. Använder din webbplats en av dessa funktioner, utelämna den då. |
Content-Security-Policy (fullständig) | Begränsar varifrån skript, stilar och bilder får laddas. Det gör infogade skadliga skript (XSS) mycket svårare. | Skräddarsydd per webbplats. Undvik unsafe-inline, unsafe-eval och jokertecken. |
Ställa in i .htaccess
Lägg dessa rader överst i filen .htaccess i mappen public_html för din domän. Gör först en kopia av filen.
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set Content-Security-Policy "frame-ancestors 'self'" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Bara om HSTS-omkopplaren i DirectAdmin är avstängd: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Lägg bara till includeSubDomains när du är säker på att varje underdomän har https. Använder du WordPress kan du också ställa in headerna med ett plugin. Välj ett välkänt plugin som fortfarande uppdateras, och ställ in varje header på ett ställe: i pluginet eller i .htaccess.
Content-Security-Policy-Report-Only. Den blockerar inget, men visar i webbläsarens konsol vad som skulle blockeras. Lämna detta vid tvivel till din webbyggare, eller börja bara med frame-ancestors.Testa
- Internet.nl: fyll i din domän i webbplatstestet på internet.nl.
- Din webbläsare: öppna din webbplats, tryck på F12 (eller välj Inspektera), gå till fliken Nätverk, ladda om sidan och klicka på den första begäran. Under Svarshuvuden (Response Headers) ser du allt din server skickar med.
- Kommandoraden:
curl -sI https://dindomän.nl/visar headerna.
Kontrollera efter varje ändring att din webbplats, formulär och betalsida fortfarande fungerar. Håll dessutom ditt CMS, plugins och teman uppdaterade. Se Skydda wp-login.php i WordPress.
Läs mer
- MDN: Strict-Transport-Security (engelska)
- MDN: Content-Security-Policy (engelska)
- MDN: Permissions-Policy (engelska)
- HSTS-preloadlista (engelska)
