Modul 4 · 4.2
Nettstedet ditt: https, HSTS og sikkerhetsheadere
Modul 4: E-post, nettside og domene · Lesetid: 11 minutter
Læringsmål: Etter denne leksjonen kan du kontrollere grunnsikkerheten til nettstedet ditt: et gyldig sertifikat, omdirigering til https, HSTS med en god max-age, de viktigste sikkerhetsheaderne og oppdatering av CMS-et ditt.
Nøkkelbegreper: TLS-sertifikat, https, omdirigering til https, HSTS, max-age, includeSubDomains, preload, HTTP-header, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Hva som skjer når noen åpner nettstedet ditt
Hvis en kunde skriver example.com i adressefeltet, spør nettleseren webserveren din om siden. Den samtalen går via HTTP. Med https ligger det en kryptert forbindelse rundt: TLS. Til det trenger nettstedet ditt et TLS-sertifikat (ofte fortsatt kalt SSL-sertifikat). Sertifikatet beviser at serveren virkelig hører til example.com, og krypteringen sørger for at ingen underveis kan lese med eller endre noe. Det er viktig på offentlig wifi, der du ikke vet hvem som styrer nettverket (leksjon 5.3).
Ved hvert svar sender serveren, i tillegg til selve siden, med en rekke headere: korte linjer med informasjon og instruksjoner til nettleseren. Du ser dem ikke på skjermen, men de bestemmer i stor grad hvor trygt nettleseren behandler nettstedet ditt. En del av disse headerne er sikkerhetsheadere. I denne leksjonen går vi gjennom de fire lagene: sertifikat, omdirigering, HSTS og headere. Deretter ser vi kort på oppdatering av selve nettstedet ditt.
Lag 1: et gyldig sertifikat
Et sertifikat er i orden hvis det oppfyller tre vilkår:
- det er ikke utløpt;
- det er utstedt av en pålitelig utsteder (en sertifikatmyndighet som nettleserne kjenner, som Let's Encrypt eller en kommersiell aktør);
- det gjelder for nøyaktig det navnet besøkende åpner:
example.comogwww.example.comhvis du bruker begge.
De fleste webhotell-leverandører ordner i dag et gratis sertifikat som fornyes automatisk. Går det galt, skyldes det som regel at domenenavnet peker til en annen server, eller at en CAA-post blokkerer utstederen (leksjon 4.3).
Viktig å vite: en hengelås sier ingenting om påliteligheten til nettstedet. Den sier bare at forbindelsen er kryptert og at sertifikatet hører til navnet i adressefeltet. Phishing-nettsteder på mijnbank-veilig.example har like godt en hengelås. Derfor lærer du i leksjon 3.2 å lese domenet.
Lag 2: alltid omdiriger til https
Et sertifikat alene er ikke nok. Den som åpner http://example.com, for eksempel via en gammel lenke eller ved bare å skrive navnet, skal automatisk komme til https-versjonen. Det kalles omdirigering (en redirect, som regel med statuskode 301).
En ryddig rekkefølge er:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (kun hvis du bruker www som hovedadresse)
http://www.example.com -> https://www.example.comLegg merke til den første linjen: send fra http først til https på samme navn, først deretter eventuelt til www. Slik kan nettleseren også motta HSTS-instruksjonen fra det nakne navnet. Internet.nl kontrollerer nettopp dette.
En vanlig feil er dobbel omdirigering: både i webhotell-panelet og i et plugin eller i .htaccess. Det kan gi en endeløs løkke ("for mange omdirigeringer"). Bruk ett sted.
Lag 3: HSTS
Omdirigering har et svakt øyeblikk: aller første forespørsel går fortsatt ukryptert via http. En angriper på samme nettverk kan fange opp akkurat den forespørselen og holde den besøkende på en falsk, ukryptert versjon. Det er det HSTS (HTTP Strict Transport Security, RFC 6797) er til for.
Med HSTS sender nettstedet ditt med en header via https:
Strict-Transport-Security: max-age=31536000; includeSubDomainsNettleseren husker da: "åpne dette nettstedet kun via https, de neste 31 536 000 sekundene (ett år)". Skriver den besøkende senere http://example.com, gjør nettleseren selv om til https, før noe i det hele tatt sendes over nettverket. Den svake første forespørselen faller bort.
| Del | Betydning |
|---|---|
max-age= | Hvor lenge nettleseren husker det, i sekunder. Internet.nl regner minst ett år (max-age=31536000) som tilstrekkelig; en kort periode beskytter ikke folk som bare besøker nettstedet ditt av og til. |
includeSubDomains | Gjelder også for alle underdomener, som shop.example.com og mail.example.com. |
preload | Du ber om opptak i listen som er innebygd i nettlesere (hstspreload.org). Da er selv aller første besøk beskyttet. Krav: blant annet max-age på minst ett år, includeSubDomains og alle underdomener på https. Å komme ut av listen igjen tar lang tid. |
max-age=0 | Sletter den lagrede instruksjonen igjen. |
Tre ting du bør vite før du skrur på HSTS:
- Først må https fungere overalt. En nettleser som har husket HSTS og ser en sertifikatfeil, gir den besøkende ingen knapp for å fortsette likevel (RFC 6797, avsnitt 12.1). Utløper sertifikatet ditt eller stemmer det ikke for
www, er nettstedet ditt utilgjengelig for disse besøkende til problemet er løst. includeSubDomainspåvirker alt under domenet ditt. Et gammelt underdomene uten sertifikat, for eksempel en printer- eller kameraside påcamera.example.com, kan deretter ikke lenger åpnes.- Bygg det opp gradvis. Begynn med en kort
max-age(for eksempel en dag), kontroller at alt fungerer, og øk trinnvis til ett år. Vent ved hvert trinn ut hele perioden.
En HSTS-header som kommer inn via vanlig http, ignorerer nettleseren. Du ser den altså bare i https-svaret.
Lag 4: sikkerhetsheadere
I tillegg til HSTS finnes det noen headere som forteller nettleseren hva den kan og ikke kan gjøre med sidene dine. Du trenger ikke ha alle perfekte, men de tre første er enkle og uten risiko.
| Header | Mot hva | God verdi |
|---|---|---|
X-Content-Type-Options | Nettleseren gjetter 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 og lar besøkende klikke på knappene dine uten å merke det. | frame-ancestors 'self' eller 'none'; den eldre headeren X-Frame-Options: SAMEORIGIN eller DENY |
Referrer-Policy | Ved et klikk til et annet nettsted sender nettleseren med adressen til forrige side. Der kan det stå sensitiv informasjon, som et søkeord eller et ordrenummer. | no-referrer eller same-origin (strengt), strict-origin-when-cross-origin (vanlig, internet.nl gir en advarsel her) |
Content-Security-Policy (fullstendig) | Begrenser hvor skript, stiler og bilder kan lastes fra. Gjør innsatte ondsinnede skript (XSS) mye vanskeligere. | Skreddersydd per nettsted. Unngå unsafe-inline, unsafe-eval og jokertegn. |
En fullstendig Content-Security-Policy er den sterkeste, men også den vanskeligste: en for streng regel ødelegger statistikken din, betalingsknappen din eller chattevinduet ditt. Med varianten Content-Security-Policy-Report-Only kan du først måle hva som ville blitt blokkert, uten å ødelegge noe. Overlat dette til nettstedbyggeren din, eller begynn bare med frame-ancestors.
Se headerne selv
Åpne nettstedet ditt i en nettleser, trykk 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 sender med. Med kommandolinjen går det også:
curl -sI https://example.com/Selve nettstedet: CMS, plugins og temaer
De beste headerne hjelper ikke hvis programvaren bak nettstedet ditt er sårbar. De fleste hackede nettsteder til små bedrifter er ikke kommet inn via webserveren, men via et utdatert plugin, et tema som ikke har blitt oppdatert på årevis, eller et svakt administratorpassord.
- Skru på automatiske oppdateringer for CMS-et ditt (for eksempel WordPress, Joomla eller et annet system) og for plugins der det er mulig.
- Fjern plugins og temaer du ikke bruker; deaktivert er ikke nok, filene ligger der fortsatt.
- Bruk et sterkt, unikt passord og tofaktorautentisering (2FA) for administratorinnloggingen (modul 2), og begrens antall innloggingsforsøk.
- Hold PHP-versjonen (eller annet språk) i pakken din på en versjon som fortsatt får oppdateringer (leksjon 5.1).
I praksis: slik ser det ut
I DirectAdmin, panelet WebOké bruker, skrur du for domenet ditt først på Secure SSL og deretter Force SSL with https redirect. På samme sted finner du en bryter for HSTS; skru den på først når sertifikatet fungerer for alle navn. Hos andre leverandører fungerer det på lignende måte, eller du ordner det i innstillingene til CMS-et ditt.
Kjører nettstedet ditt på Apache eller LiteSpeed, kan du også legge headerne i .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
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"
</IfModule>Legg til includeSubDomains først når du er sikker på at hvert underdomene har https. Kontroller etter hver endring med nettstedtesten til internet.nl eller med utviklerverktøyene i nettleseren din.
Oppsummering
- En hengelås betyr: kryptert og riktig navn. Den betyr ikke: pålitelig.
- Omdiriger alltid http til https, først på samme navn, og på ett sted.
- HSTS lar nettleseren huske at nettstedet ditt kun går via https; internet.nl regner en
max-agepå minst ett år (31536000) som bra. Skru det på først når https fungerer overalt, og bygg det opp gradvis. X-Content-Type-Options: nosniff,frame-ancestors(ellerX-Frame-Options) ogReferrer-Policyer enkle; en fullstendig Content-Security-Policy er skreddersøm.- Oppdateringer av CMS-et, pluginene og temaene dine er minst like viktig som headere.
Quiz
Oppgave
Oppgave A4.2: Kontroller beskyttelsen av domenet ditt (https, HSTS og headere). Fyll inn domenenavnet til nettstedet ditt (har du ikke et, bruk internet.nl). Programmet åpner http:// og https:// for domenet ditt og kontrollerer sertifikatet, omdirigeringen til https, HSTS og sikkerhetsheaderne. Du får per punkt grønt, oransje eller rødt med forklaring.
Oppgave D4.2: Oppdatere og rydde opp på nettstedet ditt. Logg inn på administrasjonen av nettstedet ditt, kontroller versjonen av CMS-et, pluginene og temaene dine, fjern det du ikke bruker og skru på automatiske oppdateringer der det er mulig. Kryss av sjekklisten og svar på refleksjonsspørsmålet.
Oppgave D4.2: Oppdatere og rydde opp på nettstedet ditt
Slik gjør du det: (1) Logg inn i administrasjonen av nettstedet ditt (eller be nettstedbyggeren din om å gjøre dette sammen med deg). (2) Noter versjonen av CMS-et ditt og sjekk om det finnes oppdateringer klare. (3) Lag en sikkerhetskopi (leksjon 6.1), installer oppdateringer for CMS, programtillegg og tema. (4) Fjern programtillegg og tema du ikke bruker. (5) Slå på automatiske oppdateringer der det er mulig. (6) Sjekk hvilke administratorkontoer som finnes og fjern kontoer til folk som ikke jobber der lenger. (7) Slå på tofaktorautentisering for hver administratorkonto.
Avkrysningene og notatene dine blir kun i denne nettleseren; vi sender dem ikke noe sted. Er du logget inn, lagrer vi kun i Mine kurs at du har gjort oppgaven.
Les mer
Trinnene i WebOké-artiklene gjelder for miljøet til WebOké; hos andre leverandører fungerer det på lignende måte.
- Aktivere, fornye og feilsøke SSL-sertifikat
- Tving besøkende til å bruke https
- DirectAdmin-veiledning 6.4: Besøkende alltid sende til https
- DirectAdmin-veiledning 6.7: Ingen hengelås eller "ikke sikker": løse mixed content
- DirectAdmin-veiledning 15.10: Web Application Firewall
- Sikre wp-login.php i WordPress
- Internet.nl, nettstedtest (uavhengig): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- HSTS-preload-listen: https://hstspreload.org
- MDN, forklaring av headerne (engelsk): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
