Site icon JusteGeek

Protéger votre site des attaques XSS avec l'en-tête X-XSS-Protection

Je vous ai proposé dernièrement plusieurs tutoriels pour activer certains mécanismes de protection à travers les en-têtes de trames HTTP. C'est bien et cela m'a déjà permis d'améliorer la sécurité du site JusteGeek comme vous avez déjà pu le voir à travers mes précédents tutos. Mais c'est pas fini. Il existe encore d'autres mécanismes que l'on peut implémenter. Et dans ce tutoriel, je vais vous parler des attaques de type XSS et de l'en-tête  X-XSS-Protection. Après cela, le C obtenu par le site sur Security Headers ne sera plus qu'un lointain souvenir... 🙂

JusteGeek.fr passé de D à C grâce à la mise en place de l'en-tête X-Content-Type-Options

 

Qu'est ce qu'une attaque XSS ?

Pour comprendre le mécanisme que nous allons mettre en place ici, il est important de savoir de quoi on parle et donc de savoir ce qu'est une attaque XSS, également appelée cross-site scripting. Une attaque XSS consiste en fait à exploiter une faille pour injecter du code HTML ou JavaScript dans des variables mal protégées d'un site web. L'attaque peut être réalisée de manière unitaire, c'est à dire que le pirate l’exécute une seule fois, en envoyant un formulaire par exemple, ou bien elle peut carrément être stockée dans un fichier ou en base de données pour être rejouée à chaque visite d'une page... Et oui vous imaginez bien ici la dangerosité de la chose.

Je ne vais pas ici vous faire un cours complet sur les failles XSS car ce n'est pas le but de ce billet, mais si vous voulez en apprendre davantage sur ce sujet, je vous renvoie au cours d'Openclassroom qui l'expliquera bien mieux que moi.

 

Comment fonctionne l'en-tête X-XSS-Protection ?

L'en-tête X-XSS-Protection permet d'activer la protection contre les attaques XSS incluse dans les navigateurs Internet compatibles (IE, Chrome, Safari...).  Cette en-tête peut prendre 4 valeurs différentes :

La troisième possibilité est bien évidemment la plus sécurisée car plus radicale. C'est pour ma part l'option que j'ai choisi d'implémenter. Sauf erreur de ma part, la quatrième possibilité n'est compatible qu'avec Chromium.

Il faut bien comprendre que l'en-tête X-XSS-Protection n'est pas LA solution ultime et que l'implémenter ne vous mettra pas totalement à l'abri des attaques de type Cross-Site Scripting. Mais cela constitue un petit plus dont il serait dommage de se priver !

 

Implémenter l'en-tête X-XSS-Protection sur son site web

La mise en place de l'en-tête X-XSS-Protection peut être réalisée au niveau du site Internet, via le fichier htaccess, ou bien au niveau du serveur web, via les fichiers de configuration de celui-ci. J'ai pour ma part décidé d'implémenter cela directement sur mon serveur web afin que les différents sites portés par celui-ci bénéficient de cette en-tête. Pour cela, il suffit d'éditer le fichier /etc/apache2/conf-available/security.conf et d'y ajouter la ligne suivante :

Header set X-XSS-Protection "1; mode=block"

Ensuite, un petit redémarrage du serveur web est nécessaire pour que cela soit pris en compte :

systemctl restart apache2

 

Si l'on souhaite le faire au niveau du site Internet, il suffit de configurer la section mod_headers de son fichier htaccess comme ceci :

<IfModule mod_headers.c>

Header set X-XSS-Protection "1; mode=block"

</IfModule>

 

Conclusion

Et voilà ! L'en-tête X-XSS-Protection est en place. Un nouveau check du site sur SecurityHeaders et hop, JusteGeek.fr obtient désormais la note B ! Classe non ? On se rapproche petit à petit du A ! 🙂

JusteGeek.fr passé de C à B grâce à la mise en place de l'en-tête X-XSS-Protection

 

Et si tu n'as pas vu mes précédents tutoriels sur les différents mécanismes à mettre en place dans les en-têtes de trame, fonce vite les consulter :

 

Quitter la version mobile