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

Le script intersite (XSS) et l'échappement

Après cette leçon: Je peux repérer une faille de script intersite et la corriger par l'échappement.

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

Un commentaire peut-il attaquer tous les visiteurs ?

Le script intersite, ou XSS (cross-site scripting), est une faille où un site affiche un texte tapé par un visiteur comme du code. Le navigateur de chaque personne qui ouvre la page exécute alors ce code.

Aujourd'hui, tu comprends pourquoi, et tu apprends la défense : l'échappement.

À la fin de cette leçon

Remarque

Je peux repérer une faille de script intersite et la corriger par l'échappement.

Mots clés

MotCe que ça veut direExemple
HTMLle langage qui décrit une page web<b>gras</b>
Script intersiteun texte d'un visiteur qui s'exécute chez les autres
Échappementremplacer les signes spéciaux par des codes inoffensifs
Entité HTMLun code qui affiche un signe sans qu'il agisse&lt;
Navigateurle programme qui affiche les pages web

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

La règle de ce lab

Important

Tu travailles seulement sur ta propre copie du lab DVWA, avec la permission de ton enseignant. Ne glisse jamais un script dans le site de quelqu'un d'autre, même une page de classe. On apprend la faille pour savoir la fermer.

Comment un commentaire devient du code

Un site de lycée affiche les commentaires des élèves sous un article. Il écrit le texte tapé directement dans la page HTML.

Si un élève tape des signes que HTML comprend, comme < et >, le navigateur ne les affiche pas : il les prend pour des balises. Un script caché dans le commentaire tournerait chez tous les lecteurs.

Exemple : ce que reçoit le navigateur

Commentaire tapéHTML envoyé à la pageCe que voit le lecteur
Bravo !<p>Bravo !</p>Bravo !
<b>Bravo</b><p><b>Bravo</b></p>Bravo en gras : le texte a agi comme du code
5 < 8<p>5 < 8</p>Un affichage cassé : le signe < est pris pour une balise

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Comment corriger : échapper le texte

Échapper un texte, c'est remplacer chaque signe spécial par une entité HTML. Le navigateur l'affiche comme un signe, sans le prendre pour une balise.

On le fait à l'écriture dans la page, pas à l'enregistrement. Et on remplace d'abord &, sinon on abîme les codes déjà écrits.

Les cinq signes à remplacer

SigneEntitéPourquoi
&&amp;Il commence les entités : à faire en premier
<&lt;Il ouvre une balise
>&gt;Il ferme une balise
"&quot;Il ferme une valeur entre guillemets
'&#39;Il ferme une valeur entre apostrophes

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Exemple : échapper un commentaire en Python

Code: python
def echapper(texte):
    # Le & d'abord, sinon les codes suivants seraient abîmés.
    texte = texte.replace("&", "&amp;")
    texte = texte.replace("<", "&lt;")
    texte = texte.replace(">", "&gt;")
    return texte

# Change le commentaire et relance.
print(echapper("<b>Bravo</b> & merci"))

Une erreur fréquente

Attention

Beaucoup pensent qu'il suffit de refuser le mot « script ». Ce n'est pas assez : une page peut agir avec d'autres balises. La bonne défense est d'échapper tout ce qu'un visiteur a tapé, à chaque endroit où on l'écrit dans la page.

Avant de commencer

Remarque

Appuie sur Start the lab et attends que DVWA soit prête. Le terminal du lab peut parler à la copie de DVWA avec l'adresse http://dvwa/. Dans cette leçon, tu regardes seulement la page de connexion.

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.

Demande le code de la page d'installation

Commande
curl -s -o /dev/null -w "%{http_code}\n" http://dvwa/setup.php

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.

À quoi servent les niveaux de DVWA ?

DVWA a un niveau de sécurité qu'on change dans le lab. Au niveau bas, le code affiche tout tel quel. Au niveau haut, il échappe ou filtre ce qu'on lui envoie.

Comparer les deux, dans le lab, montre à quoi ressemble du code corrigé. Tu y compareras ce que fait la page avant et après.

Pour aller plus loin : une défense en plus

Un site peut aussi dire au navigateur de refuser les scripts qui ne viennent pas de lui. Cette règle s'envoie dans les en-têtes de la réponse.

Pourquoi cette règle ne remplace-t-elle pas l'échappement ? Réponds avec les mots défense et faille.

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