Svarhoder
Slik setter dere sikkerhetsheadere som faktisk gjør noe
Svarhoder er instruksjoner nettleseren følger. De koster ingenting å sette, de krever ingen endring i koden, og de fjerner hele klasser av angrep som ellers må håndteres ett sted om gangen.
De er også lette å sette feil. En for streng CSP tar ned nettsiden, og en for slapp CSP gjør ingenting mens den ser ut som den gjør noe. Rekkefølgen under starter med de trygge.
5 steg · omtrent 25 minutter · oppdatert · skrevet av Erik Nilsen
Framgangsmåte
Se hva dere sender i dag
Hent svarhodene for forsiden og les dem.
curl -sI https://example.no | sort
Riktig svarEn liste med svarhoder. De fleste nettsteder mangler alt under, og noen sender i tillegg en Server-header som forteller nøyaktig hvilken versjon som kjører.
Sett de tre trygge først
Disse tre kan settes med en gang. De tar ikke ned noe, og de fjerner de enkleste angrepene.
Strict-Transport-Security tvinger nettleseren til HTTPS, også første gang. X-Content-Type-Options: nosniff stopper nettleseren fra å gjette filtypen, som er hvordan en opplastet bildefil blir kjørt som skript. Referrer-Policy hindrer at hele adressen, med det som måtte stå i den, sendes videre til andre nettsteder.
Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff Referrer-Policy: strict-origin-when-cross-origin
Pass påincludeSubDomains gjelder alle underdomener, også de dere har glemt. Har dere et internt verktøy på HTTP under samme domene, slutter det å virke. Sjekk listen før dere setter den, og vent med preload til dere er sikre: preload er vanskelig å reversere.
Legg til Content-Security-Policy i rapportmodus
CSP er den som virkelig betyr noe, og den som tar ned nettsider. Derfor settes den først i en variant som bare rapporterer.
Content-Security-Policy-Report-Only gjør ingenting annet enn å si fra om hva den ville blokkert. La den stå slik til rapportene er stille.
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-rapport
Stram inn og bytt til håndheving
Rapportene viser hva siden faktisk laster: analyseverktøy, skrifter, innebygde videoer. Legg til det som skal være der, og bare det.
Når rapportene er tomme, fjerner dere Report-Only fra navnet. Da håndheves den.
frame-ancestors i CSP erstatter den gamle X-Frame-Options. Setter dere frame-ancestors, trenger dere ikke den gamle, men den skader ikke å ha med for eldre nettlesere.
Pass påunsafe-inline i script-src gjør CSP-en nesten virkningsløs mot den angrepstypen den er laget for. Trenger dere innebygde skript, bruk nonce eller hash i stedet. En CSP med unsafe-inline består en overfladisk test og stopper ingenting.
Fjern det som røper mer enn nødvendig
Server og X-Powered-By forteller hvilken programvare og hvilken versjon som kjører. Det er ikke et hull i seg selv, men det sparer den som leter for tid.
Permissions-Policy slår av nettleserfunksjoner siden ikke bruker, som kamera, mikrofon og posisjon.
Feil
Det som faktisk går galt
Ikke de teoretiske feilene. Disse er de vi finner igjen og igjen.
- CSP med unsafe-inline. Ser ut som en CSP, stopper ikke det en CSP er til for.
- HSTS med preload satt for tidlig. Det er lett å slå på og vanskelig å angre.
- Headere satt i applikasjonen og i proxyen samtidig, med ulike verdier. Hvilken som vinner avhenger av oppsettet, og svaret er sjelden det noen hadde tenkt.
- Headere satt på forsiden, men ikke på API-et eller på feilsider.
- En CSP kopiert fra et annet nettsted. Den passer det nettstedet, ikke deres.
Sjekk
Vil dere se om det virket
Den gratis sjekken leser dette utenfra sammen med resten av det som er synlig, og sier hva som fortsatt står igjen. Ingen innlogging, ingen e-postadresse.
Videre
Neste veiledning
Synlighet
Eksponerte filer
Hvordan .git, .env og glemte sikkerhetskopier havner på nett, hvordan dere sjekker om deres ligger der, og hva som må gjøres når svaret er ja.
E-postsikkerhet
SPF, DKIM og DMARC
SPF, DKIM og DMARC forklart i den rekkefølgen de skal settes opp, med kommandoer for å sjekke hva dere har i dag og hva som er trygt å endre.