React vs. XSS : Là où les garde-fous s'arrêtent
React est sécurisé par défaut. Il échappe les valeurs dans JSX pour bloquer la plupart des injections de scripts. Mais cela crée un faux sentiment de sécurité. React réduit le risque de XSS, il ne l'élimine pas.
Il existe trois principaux types d'attaques XSS :
- XSS réfléchi (Reflected XSS) : Un attaquant envoie un lien malveillant. Le serveur renvoie immédiatement le script à l'utilisateur. Le navigateur exécute le script car il semble provenir d'un site de confiance.
- XSS stocké (Stored XSS) : L'attaquant enregistre un script sur votre serveur. Il réside dans votre base de données, vos commentaires ou vos journaux (logs). Chaque utilisateur qui consulte ce contenu exécute le script.
- XSS basé sur le DOM (DOM Based XSS) : L'attaque se produit entièrement dans le navigateur. L'attaquant modifie les paramètres de l'URL ou les entrées côté client pour forcer votre JavaScript à se comporter de manière malveillante.
De quoi React vous protège-t-il réellement ?
- Échappement automatique : React traite les chaînes de caractères comme du texte brut. Si vous tentez d'injecter une balise
<script>dans JSX, React affichera le texte au lieu d'exécuter le code. - Rendu sécurisé : React gère l'apparence du contenu. Cela réduit votre besoin d'utiliser des API de navigateur dangereuses.
- Moins de manipulation du DOM : React gère les mises à jour. Vous n'avez pas besoin d'utiliser
document.write()ouinnerHTMLaussi fréquemment.
React propose des issues de secours (escape hatches). Si vous les utilisez mal, vous créez des vulnérabilités.
Attention à ces erreurs :
dangerouslySetInnerHTML: Cette propriété indique à React de sauter l'étape d'échappement. Elle insère le HTML exactement tel quel. Si le contenu n'est pas propre, l'attaquant l'emporte. Utilisez DOMPurify pour assainir votre contenu au préalable.- Manipulation directe du DOM : Si vous utilisez
element.innerHTMLavec une entrée utilisateur, vous contournez toute la sécurité de React. - Bibliothèques tierces : Certains outils externes pourraient ne pas suivre les mêmes règles de sécurité.
React fournit les outils pour la sécurité. Vous devez les utiliser correctement. La sécurité est votre responsabilité.
Source : https://dev.to/ayomidejhay/react-vs-xss-where-the-guardrails-end-6p2