Skip to content

Comment empêcher le XSS ?

Réponse courte

La défense principale est l'encodage de sortie contextuel — encoder les données non fiables pour l'endroit exact où elles atterrissent (corps HTML, attribut, JavaScript, URL). Associez cela à des API DOM sûres (textContent plutôt qu'innerHTML), à l'auto-échappement des frameworks, à la validation des entrées et à une Content-Security-Policy comme rempart de défense en profondeur qui limite quels scripts peuvent s'exécuter.

Le XSS survient quand des données non fiables sont interprétées comme du code par le navigateur. Toute la stratégie de prévention découle d'un principe : garder les données comme des données. Le navigateur change constamment de contexte d'analyse — HTML, attributs, JavaScript, CSS, URL — et chaque contexte a des caractères différents qui permettent d'en sortir. Le correctif n'est donc pas une fonction magique ; c'est faire le bon encodage au bon endroit.

Encodage de sortie contextuel (le contrôle principal)

Encodez les valeurs non fiables au point de sortie, pour le contexte spécifique :

  • Corps HTML → encoder en entités HTML (< devient &lt;).
  • Attribut HTML → encoder pour attribut et toujours mettre l'attribut entre guillemets.
  • À l'intérieur d'un <script> / d'une chaîne JS → encoder pour JavaScript (échappements Unicode).
  • Paramètre d'URL → encoder pour URL.

Les frameworks modernes (React, Angular, Vue) auto-échappent par défaut, ce qui explique pourquoi le XSS n'apparaît souvent que là où les développeurs recourent à des échappatoires comme dangerouslySetInnerHTML ou v-html.

API DOM sûres

Pour le rendu côté client, préférez textContent, setAttribute et createElement à innerHTML, document.write et eval. Lorsque vous devez réellement rendre du HTML riche, faites-le passer par un assainisseur éprouvé comme DOMPurify plutôt que d'en écrire un vous-même.

Validation des entrées — utile, pas suffisante

Validez et rejetez les entrées manifestement mauvaises (listes d'autorisation, longueur, type) à la frontière. Mais la validation seule ne peut pas arrêter le XSS, car des données légitimes (un nom contenant un <) doivent quand même être encodées à la sortie.

Content-Security-Policy comme rempart

Une CSP stricte basée sur un nonce ou un hachage qui interdit le script en ligne et eval fait que même si une charge utile passe au travers, le navigateur refuse de l'exécuter. C'est de la défense en profondeur, pas un contrôle principal.

Les recruteurs veulent entendre d'abord « encodage de sortie contextuel », la compréhension que la validation ne suffit pas, et la CSP présentée comme un rempart — ainsi qu'une API sûre ou un assainisseur nommé.

Questions de suivi probables

  • Pourquoi la validation des entrées seule est-elle insuffisante pour arrêter le XSS ?
  • Comment une CSP stricte basée sur un nonce réduit-elle l'impact du XSS ?
  • Quel est le bon encodage pour des données placées à l'intérieur d'une chaîne JavaScript ?

Sources

Recevez 100 questions d'entretien en cybersécurité + réponses

Laissez votre e-mail et nous vous enverrons le pack PDF gratuit et le jeu de flashcards.

Pas de spam. Désabonnez-vous à tout moment.