Was X-Content-Type-Options macht
Der Header X-Content-Type-Options mit dem Wert „nosniff“ verbietet dem Browser, den Typ einer Datei zu raten. So wird aus einer harmlosen Textdatei kein ausführbares Skript.
So funktioniert es
Jede Antwort eines Webservers trägt im Header Content-Type, was sie ist: text/html für eine Seite, image/png für ein Bild, text/javascript für ein Skript. Fehlt die Angabe oder ist sie falsch, schauen Browser in den Inhalt und raten. Das heißt MIME-Sniffing.
Gefährlich wird das, wenn Besucher Dateien hochladen dürfen. Lädt ein Angreifer eine Datei hoch, die wie ein Bild oder Text aussieht, aber Skriptcode enthält, kann ein ratender Browser sie als Skript ausführen, sobald eine Seite sie einbindet.
Mit X-Content-Type-Options: nosniff hält sich der Browser an den angegebenen Typ. Ein Skript oder Stylesheet, dessen Content-Type nicht passt, lädt er nicht.
Worauf es ankommt
- Nur ein gültiger Wert.
nosniffist der einzige. Andere Werte oder Tippfehler wirken nicht. - Genau einmal senden. Setzen Webserver und Anwendung den Header beide, steht er doppelt in der Antwort. Sende ihn an einer Stelle.
- Für alle Antworten. Am wichtigsten ist er für hochgeladene Dateien und Skripte, nicht nur für HTML-Seiten.
- Richtige Typen. Mit
nosniffmuss derContent-Typestimmen, sonst laden Skripte oder Stylesheets nicht mehr. Webserver bringen dafür eine Liste mit; eigene Dateiendungen musst du eventuell nachtragen.
So richtest du es ein
Der Header:
X-Content-Type-Options: nosniff
Er gehört in die Konfiguration des Webservers, damit er für jede Datei gilt, auch für Bilder und Uploads, die nicht durch die Anwendung laufen.
Achtung bei nginx: Hat ein location-Block eigene add_header-Zeilen, erbt er die äußeren nicht.
Bei Shared Hosting geht das meist über die .htaccess, bei einem CDN über eine Regel für Antwort-Header. Prüfe danach, ob alle Skripte und Stylesheets noch laden.