HSTS og sikkerhedsheaders til din hjemmeside
Ved hver side sender din webserver headers med: korte linjer med instruktioner til browseren. De bestemmer til dels, hvor sikkert browseren håndterer din side. Her kan du læse, hvad HSTS er, hvilke andre sikkerhedsheaders der findes, og hvordan du indstiller og tester dem.
Først skal din side have et fungerende certifikat og sende besøgende til https. Det kan du læse om i Aktivering, fornyelse og fejlfinding af SSL-certifikat og Tving besøgende til at bruge https.
Hvad gør HSTS?
Omdirigering til https har ét svagt punkt: den første forespørgsel via http sendes stadig ukrypteret. En person på samme netværk, for eksempel på offentlig wifi, kan opsnappe den forespørgsel. HSTS (HTTP Strict Transport Security) løser det. Din side sender denne header med via https:
Strict-Transport-Security: max-age=31536000
Browseren husker derefter, at den kun må åbne din side via https. Hvis en besøgende senere skriver http://, laver browseren selv om det til https, endnu før noget sendes over netværket. En HSTS-header, der kommer ind via almindelig http, ignorerer browseren.
| Del | Betydning |
|---|---|
max-age | Hvor længe browseren husker det, i sekunder. Testen fra internet.nl regner mindst et år (31536000) for tilstrækkeligt. |
includeSubDomains | Gælder også for alle underdomæner, som shop.dindomæne.nl og mail.dindomæne.nl. |
preload | Du beder om optagelse på listen, der er indbygget i browsere (hstspreload.org). Så er selv det allerførste besøg beskyttet. Dertil kræves blandt andet et år, includeSubDomains og https på alle underdomæner. At blive fjernet igen tager lang tid. |
max-age=0 | Sletter den huskede instruktion igen ved næste besøg via https. |
includeSubDomains gælder det også for hvert underdomæne, som en gammel kamera- eller printerside uden certifikat. Byg det derfor op: begynd med en kort max-age, for eksempel en dag (86400), kontroller at alt virker, og forøg trinvist til et år.HSTS-kontakten i DirectAdmin
I DirectAdmin går du til Domains og klikker på dit domænenavn. Hvis Secure SSL Connection er slået til, ser du ved HSTS kontakten Enable HTTP Strict Transport Security. Klik derefter på Save for at gemme. Hvordan det foregår trin for trin, kan du læse i Send altid besøgende til https.
Vil du vide, hvilken max-age din side sender med, så se i udviklerværktøjerne i din browser eller i testen fra internet.nl (se nedenfor). Indstil HSTS ét sted: enten i DirectAdmin eller i .htaccess, ikke begge dele. Modtager browseren to HSTS-headers, bruger den kun den første.
De andre sikkerhedsheaders
| Header | Imod | Værdi at starte med |
|---|---|---|
X-Content-Type-Options | Browseren gætter selv, hvad en fil er, hvorved et uploadet "billede" kan blive udført som script. | nosniff (den eneste gyldige værdi) |
Content-Security-Policy: frame-ancestors eller X-Frame-Options | Clickjacking: en anden side indlæser din side usynligt i en frame, så besøgende ubemærket klikker på dine knapper. | frame-ancestors 'self', eller den ældre header X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Ved et klik til en anden side sender browseren adressen på den forrige side med, nogle gange med et søgeord eller ordrenummer i. | strict-origin-when-cross-origin, eller strengere same-origin eller no-referrer. Internet.nl regner kun de strenge værdier som gode. |
Permissions-Policy | Bestemmer hvilke browserfunktioner din side og indlejrede frames må bruge, som kamera, mikrofon og placering. | camera=(), microphone=(), geolocation=() slår de tre fra. Bruger din side en af disse funktioner, så udelad den. |
Content-Security-Policy (fuld) | Begrænser hvorfra scripts, stilarter og billeder må indlæses. Det gør indsatte ondsindede scripts (XSS) langt sværere. | Skræddersyet pr. side. Undgå unsafe-inline, unsafe-eval og wildcards. |
Indstilling i .htaccess
Sæt disse linjer øverst i filen .htaccess i mappen public_html for dit domæne. Lav først en kopi af 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=()" # Kun hvis HSTS-kontakten i DirectAdmin er slået fra: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Tilføj først includeSubDomains, når du er sikker på, at hvert underdomæne har https. Bruger du WordPress, kan du også indstille headerne med et plugin. Vælg et kendt plugin, der stadig opdateres, og indstil hver header ét sted: i plugin'et eller i .htaccess.
Content-Security-Policy-Report-Only. Den blokerer ikke noget, men viser i browserens konsol, hvad der ville blive blokeret. Overlad dette til din webudvikler, hvis du er i tvivl, eller start kun med frame-ancestors.Test
- Internet.nl: indtast dit domæne i websitetesten på internet.nl.
- Din browser: åbn din side, tryk på F12 (eller vælg Undersøg), gå til fanen Network, genindlæs siden og klik på den første forespørgsel. Under Response Headers ser du alt, hvad din server sender med.
- Kommandolinjen:
curl -sI https://dindomæne.nl/viser headerne.
Kontroller efter hver ændring, om din side, formularer og betalingsside stadig virker. Hold desuden dit CMS, plugins og temaer opdateret. Se Sikring af wp-login.php i WordPress.
Læs mere
- MDN: Strict-Transport-Security (engelsk)
- MDN: Content-Security-Policy (engelsk)
- MDN: Permissions-Policy (engelsk)
- HSTS-preloadliste (engelsk)
