Hva gjør X-Content-Type-Options?

Sikkerhetsoverskrifter er et undersett av HTTP-svarhodet som kan settes av en webserver som hver bruker en sikkerhetskontroll i nettlesere. HTTP-hoder er en form for metadata som sendes med nettforespørsler og svar. Sikkerhetsoverskriften "X-Content-Type-Options" forhindrer nettlesere fra å utføre MIME-sniffing.

Merk: HTTP-hoder er ikke eksklusive for HTTP og brukes også i HTTPS.

Hva er MIME-sniffing?

Når data sendes over nettet, er en av metadataene inkludert en MIME-type. Multipurpose Internet Mail Extensions, eller MIME-typer er en standard som brukes til å definere typen data en fil inneholder, som indikerer hvordan filen skal håndteres. Vanligvis består MIME-typen av en type og undertype med en valgfri parameter og verdi. For eksempel vil en UTF-8-tekstfil ha MIME-typen "text/plain; tegnsett=UTF-8". I det eksemplet er typen "tekst", undertypen er "vanlig", parameteren er "charset", og verdien er "UTF-8".

For å forhindre feilmerking og feilhåndtering av filer, utfører webservere vanligvis MIME-sniffing. Dette er en prosess der den eksplisitt angitte MIME-typen ignoreres, og i stedet blir starten på filen analysert. De fleste filtyper inkluderer overskriftssekvenser som indikerer hvilken type fil det er. Mesteparten av tiden er MIME-typer riktige, og det å snuse på filen gjør ingen forskjell. Hvis det imidlertid er en forskjell, vil webservere bruke den sniffede filtypen for å bestemme hvordan filen skal håndteres i stedet for den deklarerte MIME-typen.

Problemet oppstår hvis en angriper klarer å laste opp en fil som et PNG-bilde, men filen er egentlig noe annet som JavaScript-kode. For lignende filtyper, for eksempel to teksttyper, kan dette ikke forårsake for mye problem. Det blir imidlertid et alvorlig problem hvis en helt ufarlig fil kan kjøres i stedet.

Hva gjør X-Content-Type-Options?

X-Content-Type-Options-overskriften har bare én mulig verdi "X-Content-Type-Options: nosniff". Aktivering informerer brukerens nettleser om at den ikke må utføre MIME-type sniffing og i stedet stole på den eksplisitt deklarerte verdien. Uten denne innstillingen, hvis en ondsinnet JavaScript-fil var forkledd som et bilde, for eksempel en PNG, ville JavaScript-filen bli kjørt. Med X-Content-Type-Options aktivert vil filen bli behandlet som et bilde som ikke kan lastes inn fordi filen ikke er et gyldig bildeformat.

X-Content-Type-Options er ikke spesielt nødvendig på et nettsted som bruker fullstendig førstepartsressurser, siden det ikke er sjanse for at en ondsinnet fil blir servert ved et uhell. Hvis et nettsted bruker tredjepartsinnhold som eksterne eller brukerinnsendte ressurser, gir X-Content-Type-Options beskyttelse mot denne typen angrep.