HSTS og sikkerhetsheadere for nettstedet ditt
Ved hver side sender webserveren din med headere: korte linjer med instruksjoner til nettleseren. De bestemmer delvis hvor sikkert nettleseren håndterer siden din. Her leser du hva HSTS er, hvilke andre sikkerhetsheadere som finnes, og hvordan du stiller dem inn og tester dem.
Først må nettstedet ditt ha et fungerende sertifikat og sende besøkende til https. Det kan du lese om i Aktivere, fornye og løse problemer med SSL-sertifikat og Tvungen videresending av besøkende til https.
Hva gjør HSTS?
Videresending til https har ett svakt punkt: den første forespørselen via http går fortsatt ukryptert. Noen på samme nettverk, for eksempel på åpent wifi, kan avskjære den forespørselen. HSTS (HTTP Strict Transport Security) løser dette. Nettstedet ditt sender denne headeren via https:
Strict-Transport-Security: max-age=31536000
Nettleseren husker da at han bare skal åpne nettstedet ditt via https. Skriver en besøkende senere http://, gjør nettleseren det automatisk om til https, før noe går over nettverket. En HSTS-header som kommer inn via vanlig http, ignorerer nettleseren.
| Del | Betydning |
|---|---|
max-age | Hvor lenge nettleseren husker det, i sekunder. Testen til internet.nl regner minst ett år (31536000) som tilstrekkelig. |
includeSubDomains | Gjelder også for alle underdomener, som shop.dittdomene.nl og mail.dittdomene.nl. |
preload | Du ber om å bli lagt til i listen som er innebygd i nettlesere (hstspreload.org). Da er selv det aller første besøket beskyttet. For dette kreves blant annet ett år, includeSubDomains og https på alle underdomener. Å bli fjernet igjen tar lang tid. |
max-age=0 | Sletter den husket instruksjonen igjen, ved neste besøk via https. |
includeSubDomains gjelder dette også for hvert underdomene, som en gammel kamera- eller printerside uten sertifikat. Bygg det derfor opp gradvis: begynn med en kort max-age, for eksempel en dag (86400), kontroller at alt fungerer, og øk trinnvis til ett år.HSTS-bryteren i DirectAdmin
I DirectAdmin går du til Domener og klikker på domenenavnet ditt. Er Sikker SSL-tilkobling på, ser du ved HSTS bryteren Aktiver HTTP Strict Transport Security. Klikk deretter på Rediger for å lagre. Hvordan dette gjøres steg for steg, kan du lese i Alltid send besøkende til https.
Vil du vite hvilken max-age nettstedet ditt sender med, se i utviklerverktøyene i nettleseren din eller i testen til internet.nl (se nedenfor). Still inn HSTS på ett sted: i DirectAdmin eller i .htaccess, ikke begge. Får nettleseren to HSTS-headere, bruker den bare den første.
De andre sikkerhetsheadene
| Header | Mot hva | Verdi å begynne med |
|---|---|---|
X-Content-Type-Options | Nettleseren begynner å gjette selv hva en fil er, slik at et opplastet "bilde" kan bli kjørt som skript. | nosniff (den eneste gyldige verdien) |
Content-Security-Policy: frame-ancestors eller X-Frame-Options | Clickjacking: et annet nettsted laster siden din usynlig i en ramme, slik at besøkende uten å merke det klikker på knappene dine. | frame-ancestors 'self', eller den eldre headeren X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Ved et klikk til et annet nettsted sender nettleseren med adressen til forrige side, noen ganger med et søkeord eller ordrenummer i. | strict-origin-when-cross-origin, eller strengere same-origin eller no-referrer. Internet.nl regner bare de strenge verdiene som godkjent. |
Permissions-Policy | Bestemmer hvilke nettleserfunksjoner siden din og innebygde rammer kan bruke, som kamera, mikrofon og posisjon. | camera=(), microphone=(), geolocation=() slår av disse tre. Bruker nettstedet ditt en av disse funksjonene, la den stå ute. |
Content-Security-Policy (fullstendig) | Begrenser hvorfra skript, stiler og bilder kan lastes. Dette gjør innsatte skadelige skript (XSS) mye vanskeligere. | Skreddersydd per nettsted. Unngå unsafe-inline, unsafe-eval og jokertegn. |
Stille inn i .htaccess
Sett disse linjene øverst i filen .htaccess i mappen public_html til domenet ditt. Lag først en kopi 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=()" # Bare hvis HSTS-bryteren i DirectAdmin er av: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Legg til includeSubDomains først når du er sikker på at hvert underdomene har https. Bruker du WordPress, kan du også stille inn headerne med et plugin. Velg et kjent plugin som fortsatt oppdateres, og still inn hver header på ett sted: i pluginet eller i .htaccess.
Content-Security-Policy-Report-Only. Den blokkerer ingenting, men viser i konsollen til nettleseren hva som ville blitt blokkert. Overlat dette til webutvikleren din ved tvil, eller begynn bare med frame-ancestors.Testing
- Internet.nl: fyll inn domenet ditt i nettstedstesten på internet.nl.
- Nettleseren din: åpne nettstedet ditt, trykk på F12 (eller velg Inspiser), gå til fanen Nettverk, last siden på nytt og klikk på den første forespørselen. Under Svarheadere (Response Headers) ser du alt serveren din sender med.
- Kommandolinjen:
curl -sI https://dittdomene.nl/viser headerne.
Kontroller etter hver endring at nettstedet ditt, skjemaer og betalingssiden fortsatt fungerer. Hold dessuten CMS-et, pluginene og temaene dine oppdatert. Se Sikre wp-login.php i WordPress.
Les mer
- MDN: Strict-Transport-Security (engelsk)
- MDN: Content-Security-Policy (engelsk)
- MDN: Permissions-Policy (engelsk)
- HSTS-forhåndslastingsliste (engelsk)
