0Pricing
React Academy · Leçon

XSS dans React : dangerouslySetInnerHTML et scripts tiers

Comprenez comment l’échappement par défaut de React empêche les attaques XSS, dans quels cas dangerouslySetInnerHTML est dangereux et comment les scripts tiers introduisent des risques.

XSS dans React : dangerouslySetInnerHTML et scripts tiers est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

La protection XSS intégrée de React

React échappe automatiquement toutes les valeurs rendues via JSX avant de les insérer dans le DOM. Lorsque vous écrivez {userInput} en JSX, React effectue l’équivalent d’une affectation à textContent : la valeur est traitée comme du texte, jamais comme du HTML. Cela empêche par défaut la majorité des attaques XSS dans les applications React.

Fonctionnement de dangerouslySetInnerHTML

dangerouslySetInnerHTML={{ __html: htmlString }} est le mécanisme de contournement de React qui désactive l’échappement automatique. Son nom est volontairement alarmant : il vous indique que vous êtes responsable de la sécurité de la chaîne HTML. React définit directement innerHTML, en interprétant tout le HTML, y compris les scripts et les gestionnaires d’événements.

Utilisations légitimes

Vous avez réellement besoin de dangerouslySetInnerHTML lorsque vous rendez du HTML provenant d’un éditeur de texte enrichi (comme TipTap ou Quill), d’un CMS qui stocke du HTML ou d’un convertisseur Markdown vers HTML. Ces sources produisent un véritable balisage HTML qui doit être rendu comme du HTML, et non comme du texte échappé.

Le vecteur d’attaque

Si la chaîne HTML contient <script>stealCookies()</script> ou <img src=x onerror="stealData()">, l’affecter à innerHTML exécute le code de l’attaquant. Tout contenu fourni par un utilisateur et transmis directement à dangerouslySetInnerHTML sans assainissement constitue une vulnérabilité XSS critique.

DOMPurify&nbsp;: l’assainisseur standard

DOMPurify est l’assainisseur HTML standard du secteur pour les navigateurs. Il analyse la chaîne HTML dans un contexte isolé, supprime les éléments et attributs dangereux (balises de script, gestionnaires d’événements, URL javascript:) et renvoie une chaîne HTML sûre. Utilisation : DOMPurify.sanitize(dirtyHtml) avant de la transmettre à dangerouslySetInnerHTML.

Risques liés aux scripts tiers

Les scripts tiers (outils d’analyse, widgets de discussion, réseaux publicitaires) disposent des mêmes autorisations que le JavaScript de votre application. Un script tiers compromis ou malveillant peut lire document.cookie, accéder à localStorage, lire les champs de formulaire et envoyer des requêtes à des serveurs externes, sans que l’utilisateur en soit informé.

La politique de sécurité du contenu comme couche de défense

La politique de sécurité du contenu est un en-tête HTTP qui indique quels scripts sont autorisés à s’exécuter. Même si une charge utile XSS est injectée dans le DOM, une CSP correctement configurée peut bloquer son exécution en restreignant les scripts intégrés et en autorisant uniquement les sources de scripts figurant dans une liste d’autorisation. La CSP constitue la deuxième ligne de défense après l’assainissement des entrées.

Attaques de la chaîne d’approvisionnement via npm

Les paquets npm constituent un véritable vecteur d’attaque XSS. Une dépendance peut contenir du code malveillant qui exfiltre des variables d’environnement ou des données utilisateur. L’incident node-ipc de 2022 et la compromission de ua-parser-js en 2021 ont montré que des paquets largement utilisés peuvent être détournés et contaminés. Auditez vos dépendances avec npm audit et utilisez des fichiers de verrouillage.

Ce que les attaquants peuvent faire avec XSS

Une attaque XSS réussie permet à un attaquant de voler le jeton JWT de l’utilisateur stocké dans sessionStorage (en l’envoyant à un serveur contrôlé par l’attaquant), d’agir au nom de l’utilisateur authentifié (en effectuant des appels d’API avec sa session), de modifier le DOM pour afficher du contenu d’hameçonnage ou d’enregistrer chaque touche frappée par l’utilisateur dans l’application.

API Trusted Types

L’API Trusted Types du navigateur exige que tous les points d’insertion du DOM (innerHTML, eval, script.src) reçoivent des objets typés spéciaux plutôt que des chaînes brutes. Cela empêche les charges utiles XSS fondées sur des chaînes d’atteindre le DOM au niveau de la plateforme. React travaille à la compatibilité avec Trusted Types, et la CSP peut l’imposer.

Modèles sûrs pour le contenu d’un CMS

Le modèle sûr pour rendre du HTML provenant d’un CMS consiste à récupérer le HTML, à le faire passer par DOMPurify.sanitize() avec une liste d’autorisation de balises et d’attributs sûrs, puis à le rendre avec dangerouslySetInnerHTML={{ __html: cleanHtml }}. Ne sautez jamais l’étape d’assainissement, même si vous faites confiance au CMS, car la base de données du CMS elle-même pourrait être compromise.

Rôle de DOMPurify

Que fait DOMPurify lorsque vous appelez DOMPurify.sanitize(htmlString) ?

Récapitulatif de la leçon

React échappe automatiquement les valeurs JSX, ce qui empêche la plupart des attaques XSS. dangerouslySetInnerHTML contourne cette protection pour permettre un rendu HTML légitime : assainissez toujours l’entrée avec DOMPurify au préalable. Les scripts tiers et les paquets npm compromis sont des vecteurs XSS liés à la chaîne d’approvisionnement. La politique de sécurité du contenu fournit une deuxième couche de défense. Une attaque XSS réussie permet le vol de jetons, l’usurpation d’identité et l’hameçonnage.

Questions Fréquemment Posées

La leçon « XSS dans React : dangerouslySetInnerHTML et scripts tiers » est-elle gratuite ?

Oui — le texte complet de « XSS dans React : dangerouslySetInnerHTML et scripts tiers » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « XSS dans React : dangerouslySetInnerHTML et scripts tiers » ?

Comprenez comment l’échappement par défaut de React empêche les attaques XSS, dans quels cas dangerouslySetInnerHTML est dangereux et comment les scripts tiers introduisent des risques. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « XSS dans React : dangerouslySetInnerHTML et scripts tiers » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. XSS dans React : dangerouslySetInnerHTML et scripts tiers
  2. Protection contre les attaques CSRF dans React et les configurations d’API
  3. Politique de sécurité du contenu pour les applications React
  4. Gestion des secrets et variables d’environnement
← Retour à React Academy