Back-end · 4 mondes · 12 étapes
Auth & sécurité
Mots de passe, jetons signés, failles du web et autorisation, écrits de ses mains.
Progression
0 %
0/12 étapes terminées
Intermédiaire · 10 min de lecture
Les injections
Quand une donnée est interprétée comme du code
1Définition
Une injection survient quand une donnée fournie par l'utilisateur est insérée dans un langage interprété — HTML (XSS), SQL, commande système, chemin de fichier — sans être neutralisée. La donnée franchit la frontière entre texte et instructions.
2Principes fondamentaux
01
Séparer données et instructions
Requêtes paramétrées pour SQL, textContent pour le DOM, tableaux d'arguments pour les commandes.
02
Échapper selon le contexte
L'échappement HTML ne protège pas du SQL, et réciproquement : chaque langage a le sien.
03
Listes blanches
Pour une redirection, un nom de fichier, un tri : accepter seulement des valeurs connues.
04
Défense en profondeur
Une Content-Security-Policy limite les dégâts d'un XSS qui aurait échappé au reste.
3Exemples pratiques
Trois injections, trois parades
1// HTML : textContent plutôt qu'innerHTML2element.textContent = pseudo;3 4// SQL : paramètres, jamais de concaténation5db.query("SELECT * FROM joueurs WHERE pseudo = $1", [pseudo]);6 7// Fichiers : liste blanche de noms8if (!/^[A-Za-z0-9._-]+$/.test(nom) || nom.includes("..")) refuser();Même principe à chaque fois : la donnée reste une donnée, quel que soit son contenu.
Une Content-Security-Policy
1Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'Même si un script est injecté, le navigateur refuse de l'exécuter s'il ne vient pas du site lui-même.
4Erreurs courantes
innerHTML avec une donnée
À éviter
liste.innerHTML += "<li>" + pseudo + "</li>";À faire
const li = document.createElement("li"); li.textContent = pseudo; liste.append(li);Pourquoi : Le pseudo devient du HTML exécutable.
Concaténer du SQL
À éviter
`SELECT * FROM joueurs WHERE pseudo = '${pseudo}'`À faire
requête paramétréePourquoi : ' OR '1'='1 ouvre toute la table.
Suivre une redirection fournie
À éviter
return Response.redirect(url.searchParams.get("retour"));À faire
vérifier que la destination est un chemin internePourquoi : Le site devient un relais d'hameçonnage.
5Subtilités à connaître
- ◆Les attributs d'événement (
onerror,onclick) et les URLjavascript:sont des vecteurs de XSS aussi dangereux que<script>. - ◆Un contenu Markdown converti en HTML doit être assaini (DOMPurify) : le Markdown autorise le HTML brut.
- ◆Les modèles d'IA ont leur propre injection : des instructions cachées dans un texte que le modèle lit (injection de prompt).
6Vérifie ta compréhension
Question 1/3
Score 0
Afficher un pseudo sans risque dans le DOM :
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.