X-Content-Type-Options (CTO)
Demander au navigateur de respecter le type de contenu annoncé par le serveur, au lieu d’essayer de l’interpréter autrement.
Comprendre X-Content-Type-Options
Lorsqu’un site envoie un fichier au navigateur, il indique normalement de quel type de contenu il s’agit : une page HTML, une feuille de style, un script JavaScript, une image ou un autre type de fichier.
Cette information permet au navigateur de savoir comment il doit traiter le contenu reçu.
X-Content-Type-Options permet de demander au navigateur de respecter strictement le type annoncé par le serveur et de ne pas essayer de l’interpréter comme autre chose.
Qu’est-ce qu’un type MIME ?
Le type de contenu est généralement indiqué grâce à une valeur appelée type MIME.
Quelques exemples :
text/html
pour une page HTML
text/css
pour une feuille de style CSS
application/javascript
pour du JavaScript
image/jpeg
pour une image JPEG
Pourquoi est-ce important ?
Historiquement, les navigateurs ont parfois essayé de compenser les erreurs de configuration des serveurs web.
Lorsqu’un serveur annonçait un mauvais type de contenu, le navigateur pouvait examiner le fichier et tenter de deviner lui-même sa véritable nature.
Ce comportement est souvent appelé MIME sniffing.
Le problème est qu’un contenu qui devait être considéré comme inoffensif pourrait alors être interprété comme du contenu exécutable. X-Content-Type-Options permet de réduire ce type de comportement inattendu.
Configurer X-Content-Type-Options
La configuration de cet en-tête est particulièrement simple :
X-Content-Type-Options: nosniff
La valeur
nosniff
demande au navigateur
de ne pas essayer de deviner
un autre type de contenu
que celui annoncé par le serveur.
Contrairement à des mécanismes comme CSP ou Permissions-Policy, cet en-tête ne nécessite pas une longue liste de paramètres.
Pour un site web moderne,
X-Content-Type-Options: nosniff
doit être mis en place
afin que le navigateur respecte
les types de contenus déclarés.
Bien déclarer les types de contenus
Activer
nosniff
ne corrige pas automatiquement
les erreurs de configuration du serveur.
Chaque ressource doit toujours être envoyée
avec un
Content-Type
correspondant réellement
à son contenu.
Exemple
Un fichier JavaScript devrait par exemple être annoncé comme du JavaScript, et non comme un simple fichier texte.
Si le serveur fournit un mauvais type
et que
nosniff
est actif,
le navigateur peut refuser
d’utiliser la ressource.
nosniff,
il ne faut pas supprimer la protection :
il faut
corriger le type de contenu
envoyé par le serveur.
Bonnes pratiques et limites
Bonnes pratiques
-
Envoyer
X-Content-Type-Options: nosniffavec les réponses du site. -
Vérifier que chaque ressource
possède un
Content-Typecorrespondant réellement à son contenu. - Ne pas compter sur le navigateur pour corriger automatiquement une mauvaise configuration du serveur.
-
Tester le site après l’activation
de
nosniffafin d’identifier les ressources éventuellement servies avec un mauvais type de contenu.
Ce que X-Content-Type-Options ne remplace pas
X-Content-Type-Options empêche certains comportements d’interprétation automatique, mais il ne contrôle pas l’ensemble des contenus qu’une page peut charger.
Pour définir précisément quelles sources sont autorisées à fournir des scripts, images, feuilles de style ou autres ressources, il faut notamment utiliser une Content-Security-Policy (CSP) correctement configurée.
Il ne remplace pas non plus :
- la sécurité du code ;
- une configuration correcte du serveur ;
- HTTPS ;
- les autres protections nécessaires au site.
X-Content-Type-Options est donc une protection simple à mettre en place et qui doit être activée afin de demander au navigateur de respecter strictement les types de contenus déclarés par le serveur.
X-Content-Type-Options: nosniff
demande au navigateur
de respecter le type de contenu
annoncé par le serveur.