Beveiligingsheaders zijn een subset van HTTP-responsheaders die kunnen worden ingesteld door een webserver die elk een beveiligingscontrole in browsers toepast. HTTP-headers zijn een vorm van metadata die wordt verzonden met webverzoeken en -reacties. De beveiligingsheader "X-Content-Type-Options" voorkomt dat browsers MIME-sniffing uitvoeren.
Opmerking: HTTP-headers zijn niet exclusief voor HTTP en worden ook gebruikt in HTTPS.
Wat is MIME aan het snuiven?
Wanneer gegevens via internet worden verzonden, is een van de meegeleverde metagegevens een MIME-type. Multipurpose Internet Mail Extensions, of MIME-typen, zijn een standaard die wordt gebruikt om het type gegevens te definiëren dat een bestand bevat, wat aangeeft hoe het bestand moet worden behandeld. Meestal bestaat het MIME-type uit een type en subtype met een optionele parameter en waarde. Een UTF-8-tekstbestand zou bijvoorbeeld het MIME-type “text/plain; charset=UTF-8”. In dat voorbeeld is het type "tekst", het subtype is "plain", de parameter is "charset" en de waarde is "UTF-8".
Om het verkeerd labelen en verkeerd behandelen van bestanden te voorkomen, voeren webservers doorgaans MIME-sniffing uit. Dit is een proces waarbij het expliciet vermelde MIME-type wordt genegeerd en in plaats daarvan het begin van het bestand wordt geanalyseerd. De meeste bestandstypen bevatten kopreeksen die aangeven om welk type bestand het gaat. Meestal zijn MIME-typen correct en maakt het snuiven van het bestand geen verschil. Als er echter een verschil is, zullen webservers het gesnuffelde bestandstype gebruiken om te bepalen hoe het bestand moet worden verwerkt in plaats van het gedeclareerde MIME-type.
Het probleem doet zich voor als een aanvaller erin slaagt een bestand, zoals een PNG-afbeelding, te uploaden, maar het bestand in werkelijkheid iets anders is, zoals JavaScript-code. Voor vergelijkbare bestandstypen, zoals twee teksttypen, kan dit niet al te veel problemen opleveren. Het wordt echter een serieus probleem als in plaats daarvan een volkomen onschadelijk bestand kan worden uitgevoerd.
Wat doet X-Content-Type-Options?
De header X-Content-Type-Options heeft slechts één mogelijke waarde "X-Content-Type-Options: nosniff". Als u dit inschakelt, wordt de browser van de gebruiker geïnformeerd dat deze niet mag snuiven van het MIME-type en in plaats daarvan moet vertrouwen op de expliciet gedeclareerde waarde. Zonder deze instelling, als een kwaadaardig JavaScript-bestand was vermomd als een afbeelding, zoals een PNG, zou het JavaScript-bestand worden uitgevoerd. Als X-Content-Type-Options is ingeschakeld, wordt het bestand behandeld als een afbeelding die niet kan worden geladen omdat het bestand geen geldige afbeeldingsindeling heeft.
X-Content-Type-Options is niet echt nodig op een website die uitsluitend bronnen van de eerste partij gebruikt, omdat er geen kans is dat een kwaadaardig bestand per ongeluk wordt weergegeven. Als een website inhoud van derden gebruikt, zoals externe of door gebruikers ingediende bronnen, biedt X-Content-Type-Options bescherming tegen dit type aanval.