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 kan du läsa 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 SSL-certifikat och lösa problem och Tvinga besökare till https.
Vad gör HSTS?
Omdirigering till https har en svag punkt: den första förfrågan via http skickas fortfarande okrypterad. Någon på samma nätverk, till exempel på ett offentligt wifi, kan avlyssna den förfrågan. 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 vanlig http ignorerar webbläsaren.
| Del | Betydelse |
|---|---|
max-age | Hur länge webbläsaren kommer ihåg det, i sekunder. Testet från internet.nl räknar minst ett år (31536000) som tillräckligt. |
includeSubDomains | Gäller även alla subdomäner, som shop.dindomän.nl och mail.dindomän.nl. |
preload | Du begär att bli upptagen i listan som är inbyggd i webbläsare (hstspreload.org). Då är till och med det allra första besöket skyddat. För det krävs bland annat ett år, includeSubDomains och https på alla subdomäner. Att bli borttagen igen tar lång tid. |
max-age=0 | Raderar den sparade instruktionen igen, vid nästa besök via https. |
includeSubDomains gäller det även för varje subdomä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 öka stegvis till ett år.HSTS hos WebOké
På de flesta av våra servrar skickar webbservern med HSTS som standard för varje webbplats som öppnas via https: Strict-Transport-Security: max-age=31536000. Det är ett år, utan includeSubDomains och utan preload. Du behöver inte göra något för det. På ett fåtal servrar är det inte aktiverat som standard; där aktiverar du det själv. Om din webbplats redan skickar med HSTS och med vilken max-age, ser du i webbläsarens utvecklarverktyg eller i testet från internet.nl (se nedan).
HSTS-omkopplaren i DirectAdmin
I DirectAdmin går du till Domäner och klickar på ditt domännamn. Är Säker SSL-anslutning aktiverad, ser du vid HSTS växeln Aktivera HTTP Strict Transport Security. Klicka sedan på Spara för att spara. Hur det går steg för steg kan du läsa i Alltid skicka besökare till https.
Skickar din webbplats redan med HSTS, behöver du inte växeln. Aktivera den bara om din webbplats ännu inte skickar HSTS. 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.
Övriga säkerhetsheaders
| Header | Mot vad | Värde att börja med |
|---|---|---|
X-Content-Type-Options | Webbläsaren börjar själv gissa 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 ram, så att besökare omärkt klickar på dina knappar. | frame-ancestors 'self', eller den äldre headern X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Vid en klick till en annan webbplats skickar webbläsaren med adressen till föregående sida, ibland med en sökterm eller ett ordernummer i den. | strict-origin-when-cross-origin, eller strängare same-origin eller no-referrer. Internet.nl räknar bara de strängare värdena som godkända. |
Permissions-Policy | Avgör vilka webbläsarfunktioner din sida och inbäddade ramar får använda, som kamera, mikrofon och plats. | camera=(), microphone=(), geolocation=() stänger av dessa tre. Använder din webbplats någon 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 inbäddade skadliga skript (XSS) mycket svårare. | Skräddarsys 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=()" # Alleen als je site nog geen HSTS meestuurt (zie hierboven): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Lägg bara till includeSubDomains när du är säker på att varje subdomä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 ha blockerats. Lämna detta vid tveksamhet 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 förfrågan. Under Svarshuvuden (Response Headers) ser du allt som din server skickar med.
- Kommandoraden:
curl -sI https://dindomän.nl/visar headerna.
Kontrollera efter varje ändring att din webbplats, dina formulär och betalsida fortfarande fungerar. Håll dessutom ditt CMS, dina plugin och teman uppdaterade. Se Säkra 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)
