FlawOpen

flawopen.com/XSS/Content-type sniffing

XSS par MIME sniffing : comment la confusion MIME atteint le navigateur

Page de référence
Réponse courte

Le navigateur utilise le Content-Type de la réponse pour décider comment traiter ses octets. Si une application sert des fichiers contrôlés par des utilisateurs avec un type absent ou incorrect, le MIME sniffing peut modifier le comportement de certaines réponses. Envoyez le type correct et X-Content-Type-Options: nosniff, et isolez les fichiers envoyés de l’origine de l’application. Cet en-tête réduit un risque d’interprétation du navigateur ; il n’assainit pas les fichiers et ne remplace pas les contrôles d’envoi.

Comment un fichier envoyé peut franchir la frontière d’un document

Une application accepte des fichiers puis les sert depuis sa propre origine authentifiée avec un Content-Type absent ou erroné. Si le navigateur interprète la réponse comme un document HTML, le balisage du fichier peut devenir actif sur l’origine du site. Cela crée un risque de XSS persistante ou de confusion de contenu à l’ouverture. L’extension et le type déclaré dans la requête d’envoi ne prouvent pas le format des octets.

Définir le type et isoler les téléchargements

RISQUÉ — fichier envoyé servi en ligne avec des en-têtes ambigus
HTTP/1.1 200 OK
Content-Type: application/octet-stream
// sans X-Content-Type-Options
// même origine que l’application authentifiée
PLUS SÛR — type correct, nosniff et téléchargement isolé
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Content-Disposition: attachment; filename="download.txt"

Utilisez un Content-Type choisi par le serveur et correspondant aux octets ; ne reprenez pas le type déclaré par l’expéditeur. X-Content-Type-Options: nosniff désactive le MIME sniffing pour les réponses de document et bloque les requêtes de script ou de feuille de style dont le type MIME est incorrect. Ce n’est pas une correction XSS universelle : isolez les fichiers sur une autre origine, préférez Content-Disposition: attachment pour les téléchargements et appliquez des règles de taille, d’autorisation et de validation. Pour les images et médias intégrés, renvoyez le type vérifié et testez la réponse réelle dans le navigateur.

Questions fréquentes

nosniff rend-il sûr le service de n’importe quel fichier envoyé ?

Non. Il contrôle l’interprétation MIME du navigateur et les vérifications des scripts et styles, mais ne valide ni n’assainit les fichiers, ne corrige pas un Content-Type erroné et n’isole pas un fichier de même origine. Utilisez une autre origine et des téléchargements en pièce jointe pour les fichiers non fiables.

Références

À voir aussi Cross-Site Scripting (XSS, CWE-79) : fonctionnement et prévention dans chaque langage — flawopen.com CSP et échappement de sortie : faut-il les deux ? dangerouslySetInnerHTML est-il sûr dans React ? DOMPurify suffit-il pour sécuriser innerHTML ? Markdown protège-t-il contre les XSS ? Svelte protège-t-il du XSS par défaut ? Un téléversement SVG présente-t-il un risque XSS ?