Hvad gør X-Content-Type-Options?

Sikkerhedsheadere er en undergruppe af HTTP-svarheader, der kan indstilles af en webserver, der hver anvender en sikkerhedskontrol i browsere. HTTP-headere er en form for metadata, der sendes med webanmodninger og -svar. Sikkerhedsoverskriften "X-Content-Type-Options" forhindrer browsere i at udføre MIME-sniffing.

Bemærk: HTTP-headere er ikke eksklusive for HTTP og bruges også i HTTPS.

Hvad er MIME sniffing?

Når nogen data sendes over nettet, er en af ​​de inkluderede metadata en MIME-type. Multipurpose Internet Mail Extensions eller MIME-typer er en standard, der bruges til at definere den type data, en fil indeholder, som angiver, hvordan filen skal håndteres. Typisk består MIME-typen af ​​en type og undertype med en valgfri parameter og værdi. For eksempel vil en UTF-8-tekstfil have MIME-typen "text/plain; tegnsæt=UTF-8”. I det eksempel er typen "tekst", undertypen er "almindelig", parameteren er "charset", og værdien er "UTF-8".

For at forhindre fejlmærkning og forkert håndtering af filer udfører webservere typisk MIME-sniffing. Dette er en proces, hvor den eksplicit angivne MIME-type ignoreres, og i stedet analyseres starten af ​​filen. De fleste filtyper inkluderer header-sekvenser, der angiver, hvilken type fil det er. Det meste af tiden er MIME-typer korrekte, og det gør ingen forskel at snuse til filen. Hvis der dog er en forskel, vil webservere bruge den sniffede filtype til at bestemme, hvordan filen skal håndteres i stedet for den erklærede MIME-type.

Problemet opstår, hvis en angriber formår at uploade en fil, såsom et PNG-billede, men filen er i virkeligheden noget andet som JavaScript-kode. For lignende filtyper, såsom to teksttyper, forårsager dette muligvis ikke for meget af et problem. Det bliver dog et alvorligt problem, hvis en helt uskadelig fil så kan udføres i stedet for.

Hvad gør X-Content-Type-Options?

X-Content-Type-Options-headeren har kun én mulig værdi "X-Content-Type-Options: nosniff". Aktivering af den informerer brugerens browser om, at den ikke må udføre MIME-type sniffing og i stedet stole på den eksplicit deklarerede værdi. Uden denne indstilling, hvis en ondsindet JavaScript-fil var forklædt som et billede, såsom en PNG, ville JavaScript-filen blive udført. Med X-Content-Type-Options aktiveret vil filen blive behandlet som et billede, der ikke kan indlæses, da filen ikke er et gyldigt billedformat.

X-Content-Type-Options er ikke specielt nødvendigt på et websted, der udelukkende bruger førstepartsressourcer, da der ikke er nogen chance for, at en ondsindet fil ved et uheld bliver serveret. Hvis et websted bruger tredjepartsindhold såsom eksterne eller brugerindsendte ressourcer, giver X-Content-Type-Options beskyttelse mod denne type angreb.