Qu’est-ce que le cross-site scripting aveugle ?

Le script intersite aveugle est un sous-type de script intersite stocké/persistant dans lequel l’application Web stocke la charge utile envoyée par un attaquant et ne l’exécute que plus tard – à un autre moment ou à un autre endroit, éventuellement même sur un autre site Web.

Exemple de script cross-site aveugle

Dans cet exemple, le développeur permet à l’utilisateur de s’enregistrer dans l’application Web en choisissant un nom d’utilisateur arbitraire. La page register.php de l’application comprend le formulaire suivant :

<form action="/registered.php" method="post" id="comment">
  <label for="username">Choose a username:label>
  <input type="text" id="username" name="username">
  <label for "password">Choose a password:label>
  <input type="password" id="password" name="password">
  <button type="submit" form="register" value="register">Registerbutton>
form>
 

Le fichier register.php comprend le code suivant :

// Add the new user to the database using PDO to avoid SQL injection
(...)
$username=$_POST["username"];
$password=password_hash($_POST["password"], PASSWORD_DEFAULT);
$sql = "INSERT INTO users (username, password) VALUES (?,?)";
$statement = $pdo->prepare($sql);
$statement->execute([$username, $password]);
(...)
 

Comme vous pouvez le voir, l’application insère le nom d’utilisateur dans la base de données sans aucune validation ni désinfection.

Dans le même temps, un autre développeur crée une application différente qui permet à un administrateur authentifié d’afficher une liste des 50 utilisateurs les plus récents. La page newusers.php les affiche dans un tableau :

(...)
$sql = "SELECT * FROM users ORDER BY id DESC LIMIT 50";
$statement = $pdo->query($sql);
while ($row = $statement->fetch()) {
    echo "".$row['id']."".$row['username']."";
}
(...)
 

Comme vous pouvez le voir, cette application suppose que les données de la base de données sont sûres et n’effectue aucune validation ou désinfection avant de les afficher.

L’attaque aveugle par cross-site scripting

L’attaquant saisit le nom d’utilisateur suivant dans le formulaire :

<script>alert("YOUR ADMINISTRATIVE INTERFACE IS HACKED!");</script>
 

Une fois que l’attaquant a cliqué sur le bouton Enregistrer , cette charge utile d’attaque est enregistrée dans la base de données sous un nouveau nom d’utilisateur.

Une semaine plus tard, un administrateur ouvre l’application administrative et appelle la fonction ( page newusers.php ) qui liste les 50 derniers utilisateurs qui se sont inscrits via l’application publique. Si l’utilisateur malveillant en fait partie, le navigateur reçoit et interprète le code suivant lorsqu’il rencontre le nom d’utilisateur malveillant :

<td><script>alert("YOUR ADMINISTRATIVE INTERFACE IS HACKED!");script>td>
 

Le navigateur trouve une

Notre expertise, à votre service, dans le domaine de la cyber sécurité.