flawopen.com/XSS/Content-type sniffing
XSS durch MIME-Sniffing: Wie MIME-Verwechslungen den Browser erreichen
Der Browser verwendet den Content-Type einer Antwort, um deren Bytes einzuordnen. Stellt eine Anwendung nutzergesteuerte Dateien mit fehlenden oder falschen Typen bereit, kann MIME-Sniffing das Verhalten bestimmter Antworten verändern. Sende den richtigen Typ und X-Content-Type-Options: nosniff und trenne Uploads vom Ursprung der Anwendung. Der Header reduziert ein Risiko der Browserinterpretation; er bereinigt keine Dateien und ersetzt keine Upload-Kontrollen.
Wie ein Upload die Dokumentgrenze überschreiten kann
Eine Anwendung nimmt Uploads an und stellt sie später vom eigenen authentifizierten Ursprung mit fehlendem oder falschem Content-Type bereit. Interpretiert der Browser die Antwort als HTML-Dokument, kann Markup in der Datei im Ursprung der Website aktiv werden. Beim Öffnen entsteht so das Risiko von gespeichertem XSS oder einer Inhaltsverwechslung. Dateiendung und vom Uploader angegebener Medientyp beweisen nicht das Format der Bytes.
Typ gezielt setzen und Downloads isolieren
HTTP/1.1 200 OK Content-Type: application/octet-stream // kein X-Content-Type-Options // derselbe Ursprung wie die authentifizierte Anwendung
HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 X-Content-Type-Options: nosniff Content-Disposition: attachment; filename="download.txt"
Verwende einen vom Server festgelegten Content-Type, der zu den Bytes passt; übernimm nicht die Angabe des Uploaders. X-Content-Type-Options: nosniff deaktiviert MIME-Sniffing für Dokumentantworten und blockiert Script- oder Stylesheet-Anfragen mit falschem MIME-Typ. Das ist keine universelle XSS-Korrektur: Stelle Uploads von einem anderen Ursprung bereit, bevorzuge Content-Disposition: attachment für Downloads und erzwinge Größen-, Berechtigungs- und Dateiprüfungen. Für Bilder und andere Inline-Medien liefere den verifizierten Typ aus und teste den tatsächlichen Browserpfad.
Häufige Fragen
Nein. Der Header steuert die MIME-Interpretation im Browser sowie Script-/Stylesheet-Prüfungen, validiert oder bereinigt aber keine Datei, korrigiert keinen falschen Content-Type und isoliert keinen Upload desselben Ursprungs. Nutze für nicht vertrauenswürdige Dateien einen anderen Ursprung und Attachment-Downloads.
Quellen
- MDN — X-Content-Type-Options-Antwortheader
- WHATWG Fetch Standard — X-Content-Type-Options
- OWASP — HTTP-Sicherheitsheader