Une application qui fait confiance à tout
Une application web a presque toujours un champ où l'on écrit : un nom, une recherche, un numéro. Si elle fait confiance à ce qu'on écrit, quelqu'un peut y glisser autre chose qu'un nom.
Dans cette leçon, tu apprends les trois failles les plus courantes et comment une application les évite.
À la fin de cette leçon
Remarque
Je peux nommer les failles web courantes et dire comment on les ferme.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Faille | un défaut qu'un attaquant peut utiliser |
| Injection SQL | du texte glissé dans un champ pour changer une requête sur la base |
| XSS | un script glissé dans une page pour qu'il tourne chez les autres visiteurs |
| Requête préparée | une requête dont les valeurs sont toujours traitées comme du texte |
| Validation | le contrôle de ce qu'un visiteur a écrit avant de s'en servir |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Comment fonctionne une injection SQL ?
Un site de lycée cherche un élève avec une requête SQL, qu'il fabrique en collant ce que tu écris. Si tu écris 1, tout va bien.
Mais si tu écris du texte qui contient une apostrophe et une condition toujours vraie, la requête change de sens. Le site obéit à ton texte comme à un ordre.
Voir la requête fabriquée, sans la lancer
# Ce programme fabrique seulement du texte : rien n'est envoyé à une base.
saisie = "1"
requete = "SELECT nom FROM eleves WHERE id = '" + saisie + "'"
print(requete)
# Remplace la saisie par : 1' OR '1'='1
# La requête demande alors tous les élèves, pas un seul.Exemple : la même requête avec deux saisies
| Ce qui est écrit | La requête fabriquée | Ce qu'elle demande |
|---|---|---|
| 1 | SELECT nom FROM eleves WHERE id = '1' | L'élève numéro 1 |
| 1' OR '1'='1 | SELECT nom FROM eleves WHERE id = '1' OR '1'='1' | Tous les élèves, car 1=1 est toujours vrai |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent qu'il suffit d'interdire certains mots comme SELECT. Une liste de mots interdits oublie toujours quelque chose. La vraie défense est la requête préparée : les valeurs ne deviennent jamais des ordres.
Le XSS et la traversée de dossier
Le XSS arrive quand un site affiche sans protection ce qu'un visiteur a écrit. Un commentaire peut alors contenir un script, qui tourne chez tous les autres visiteurs.
La traversée de dossier arrive quand un site ouvre le fichier dont on lui donne le nom. Un nom comme ../../etc/passwd remonte hors du dossier prévu.
Chaque faille et sa défense
| Faille | Ce que le site oublie | La défense |
|---|---|---|
| Injection SQL | Séparer la requête des valeurs | Une requête préparée |
| XSS | Protéger ce qu'il affiche | Remplacer les signes comme < et > avant l'affichage |
| Traversée de dossier | Limiter les fichiers possibles | Une liste de noms permis, et refuser ../ |
| Toutes | Contrôler ce qui arrive | Valider la saisie : type, longueur, forme |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La règle du lab
Important
Teste seulement ta propre copie de l'application, et seulement avec la permission de ton enseignant. Ne pointe jamais un outil vers un site qui n'est pas le tien : c'est une infraction, même pour voir. Ici, tu testes pour apprendre à défendre.
Avant de commencer
Remarque
Appuie sur Start the lab et attends que l'application soit prête. Appuie sur Open, puis connecte-toi avec admin et password. Sur la page DVWA Security, vérifie que le niveau est low.
Demande la réponse de la page de connexion
curl -sI http://dvwa/login.php | head -n 1Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Vois ce que la page dit du serveur
curl -sI http://dvwa/login.php | grep -i "^server"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Comment les niveaux de DVWA montrent les défenses
Chaque exercice de DVWA existe à plusieurs niveaux. Au niveau low, le code fait confiance à tout. Au niveau high, il applique des défenses.
Le bouton View Source en bas de chaque exercice montre le code. Lis les deux versions du même exercice. Note ce que le niveau high fait de plus : tu le mettras dans ton propre code.