Les en-têtes de sécurité sont un sous-ensemble d'en-têtes de réponse HTTP qui peuvent être définis par un serveur Web qui applique chacun un contrôle de sécurité dans les navigateurs. Les en-têtes HTTP sont une forme de métadonnées envoyées avec les requêtes et les réponses Web. L'en-tête de sécurité « X-Content-Type-Options » empêche les navigateurs d'effectuer un reniflage MIME.
Remarque : les en-têtes HTTP ne sont pas exclusifs à HTTP et sont également utilisés dans HTTPS.
Qu'est-ce que le reniflement MIME ?
Lorsque des données sont envoyées sur le Web, l'une des métadonnées incluses est de type MIME. Les extensions de messagerie Internet polyvalentes, ou types MIME, sont une norme utilisée pour définir le type de données qu'un fichier contient, ce qui indique comment le fichier doit être traité. Typiquement, le type MIME se compose d'un type et d'un sous-type avec un paramètre et une valeur facultatifs. Par exemple, un fichier texte UTF-8 aurait le type MIME "text/plain;charset=UTF-8". Dans cet exemple, le type est "text", le sous-type est "plain", le paramètre est "charset" et la valeur est "UTF-8".
Pour éviter les erreurs d'étiquetage et de gestion des fichiers, les serveurs Web effectuent généralement un reniflage MIME. Il s'agit d'un processus où le type MIME explicitement indiqué est ignoré, et à la place, le début du fichier est analysé. La plupart des types de fichiers incluent des séquences d'en-tête qui indiquent de quel type de fichier il s'agit. La plupart du temps, les types MIME sont corrects et renifler le fichier ne fait aucune différence. S'il y a une différence, les serveurs Web utiliseront le type de fichier reniflé pour déterminer comment gérer le fichier plutôt que le type MIME déclaré.
Le problème se produit si un attaquant parvient à télécharger un fichier tel qu'une image PNG, mais le fichier est vraiment quelque chose d'autre comme du code JavaScript. Pour des types de fichiers similaires, tels que deux types de texte, cela peut ne pas poser trop de problème. Cependant, cela devient un problème sérieux si un fichier parfaitement inoffensif peut alors être exécuté à la place.
Que fait X-Content-Type-Options ?
L'en-tête X-Content-Type-Options n'a qu'une seule valeur possible "X-Content-Type-Options: nosniff". L'activer informe le navigateur de l'utilisateur qu'il ne doit pas effectuer de reniflage de type MIME et s'appuyer à la place sur la valeur explicitement déclarée. Sans ce paramètre, si un fichier JavaScript malveillant était déguisé en image telle qu'un PNG, le fichier JavaScript serait exécuté. Avec X-Content-Type-Options activé, le fichier sera traité comme une image qui ne se charge pas car le fichier n'est pas un format d'image valide.
X-Content-Type-Options n'est pas particulièrement nécessaire sur un site Web qui utilise entièrement des ressources de première partie, car il n'y a aucune chance qu'un fichier malveillant soit accidentellement servi. Si un site Web utilise du contenu tiers tel que des ressources externes ou soumises par l'utilisateur, alors X-Content-Type-Options offre une protection contre ce type d'attaque.