Vad gör X-Content-Type-Options?

Säkerhetsrubriker är en delmängd av HTTP-svarsrubriker som kan ställas in av en webbserver som var och en tillämpar en säkerhetskontroll i webbläsare. HTTP-rubriker är en form av metadata som skickas med webbförfrågningar och svar. Säkerhetshuvudet "X-Content-Type-Options" förhindrar webbläsare från att utföra MIME-sniffning.

Obs: HTTP-rubriker är inte exklusiva för HTTP och används även i HTTPS.

Vad är MIME-snuffning?

När någon data skickas över webben är en av de inkluderade metadatabitarna en MIME-typ. Multipurpose Internet Mail Extensions, eller MIME-typer är en standard som används för att definiera vilken typ av data en fil innehåller, vilket anger hur filen ska hanteras. Vanligtvis består MIME-typen av en typ och undertyp med en valfri parameter och ett värde. Till exempel skulle en UTF-8-textfil ha MIME-typen "text/plain; teckenuppsättning=UTF-8”. I det exemplet är typen "text", undertypen är "plain", parametern är "charset" och värdet är "UTF-8".

För att förhindra felmärkning och felaktig hantering av filer utför webbservrar vanligtvis MIME-sniffning. Detta är en process där den uttryckligen angivna MIME-typen ignoreras, och istället analyseras filens början. De flesta filtyper inkluderar rubriksekvenser som indikerar vilken typ av fil det är. För det mesta är MIME-typer korrekta och att sniffa filen gör ingen skillnad. Om det dock finns en skillnad kommer webbservrar att använda den sniffade filtypen för att avgöra hur filen ska hanteras snarare än den deklarerade MIME-typen.

Problemet uppstår om en angripare lyckas ladda upp en fil som en PNG-bild, men filen är egentligen något annat som JavaScript-kod. För liknande filtyper, till exempel två texttyper, kanske detta inte orsakar alltför mycket problem. Det blir dock ett allvarligt problem om en helt ofarlig fil kan köras istället.

Vad gör X-Content-Type-Options?

Rubriken X-Content-Type-Options har bara ett möjligt värde "X-Content-Type-Options: nosniff". Aktivering av den informerar användarens webbläsare om att den inte får utföra sniffning av MIME-typ och istället förlita sig på det explicit deklarerade värdet. Utan den här inställningen, om en skadlig JavaScript-fil var förklädd som en bild som en PNG, skulle JavaScript-filen köras. Med X-Content-Type-Options aktiverat kommer filen att behandlas som en bild som inte kan laddas eftersom filen inte är ett giltigt bildformat.

X-Content-Type-Options är inte särskilt nödvändigt på en webbplats som helt använder förstapartsresurser, eftersom det inte finns någon chans att en skadlig fil av misstag visas. Om en webbplats använder innehåll från tredje part, såsom externa eller användarinlämnade resurser, ger X-Content-Type-Options skydd mot denna typ av attack.