Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Tester la sécurité d'une application web

Après cette leçon: Je peux nommer les failles web courantes et dire comment on les ferme.

Leçon de 50 min2 commandesLab DVWA : s’exercer à l’injection SQL et au XSS sur la Damn Vulnerable Web Application

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

MotCe que ça veut dire
Failleun défaut qu'un attaquant peut utiliser
Injection SQLdu texte glissé dans un champ pour changer une requête sur la base
XSSun script glissé dans une page pour qu'il tourne chez les autres visiteurs
Requête préparéeune requête dont les valeurs sont toujours traitées comme du texte
Validationle 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

Code: python
# 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 écritLa requête fabriquéeCe qu'elle demande
1SELECT nom FROM eleves WHERE id = '1'L'élève numéro 1
1' OR '1'='1SELECT 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

FailleCe que le site oublieLa défense
Injection SQLSéparer la requête des valeursUne requête préparée
XSSProtéger ce qu'il afficheRemplacer les signes comme < et > avant l'affichage
Traversée de dossierLimiter les fichiers possiblesUne liste de noms permis, et refuser ../
ToutesContrôler ce qui arriveValider 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

Commande
curl -sI http://dvwa/login.php | head -n 1

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.

Vois ce que la page dit du serveur

Commande
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.

À propos de ce labo et de sa source: Lab DVWA : s’exercer à l’injection SQL et au XSS sur la Damn Vulnerable Web Application

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.