X-Content-Type-Options ist ein HTTP-Response-Header, der dem Browser vorgibt, den vom Server gelieferten Content-Type strikt zu befolgen und nicht selbst zu raten. Der einzige heute relevante Wert heißt nosniff.
Das Problem: MIME-Sniffing
Fehlt der Content-Type oder wirkt er unklar, versuchen Browser, den Dateityp einer Antwort am Inhalt zu erkennen. Dieses MIME-Sniffing öffnet eine klassische Angriffslücke: Ein Angreifer kann ausführbares HTML oder JavaScript als harmlosen Bildtyp (etwa image/png) ausliefern — der Browser führt den Inhalt dann unter Umständen als Skript aus. X-Content-Type-Options: nosniff unterbindet genau dieses Raten.
Wie nosniff wirkt
- Skripte und Stylesheets: Bei Requests mit dem Ziel script blockiert der Browser die Antwort, wenn der MIME-Typ nicht zu einem JavaScript-MIME-Typ passt; bei Stylesheets muss er
text/csssein. - Andere Ressourcen: Der Browser übernimmt den deklarierten Typ und versucht nicht, den Inhalt neu zu interpretieren.
- Kein Meta-Tag: Der Header lässt sich nur in der Server-Antwort setzen, nicht im HTML-Dokument.
Praxis
Für sensible Kontexte wie Skripte und Stylesheets setzen moderne Browser nosniff teils selbst als Standard; Web-Server sollten den Header dennoch explizit ausliefern. Er ergänzt die Content-Security-Policy und die Same-Origin-Policy bei der Absicherung gegen Cross-Site-Scripting und eingeschleuste Skripte.
Verwandte Grundlagen
Weitere Schutz-Header sind die Cross-Origin-Opener-Policy und die Cross-Origin-Resource-Policy; für Ressourcen-Requests aus dem Browser gilt zudem die Cross-Origin Resource Sharing-Regel. Wer Skripte ausliefert, findet die passenden Kommandos unter JavaScript-Befehle.