Les injections SQL

Voir la vidéo
Description Sommaire

Les injections SQL sont une failles de sécurité classique quand on débute mais qui a l'avantage d'être facile à corriger.

Qu'est-ce qu'une Injection SQL ?

Le principe de l'injection SQL est d'exploiter la génération d'une requête SQL pour faire exécuter une requête différente au serveur.

Voici un exemple de code sensible à l'injection SQL :

db.query(`SELECT id, title FROM recipe WHERE id = ${req.param('id')}`)

La requête SQL est générée à partir d'une données provenant de l'URL que l'utilisateur peut manipuler pour générer une requête différente et exposer des données sensibles. En utilisant une URL comme celle ci

https://domain.ltd/?id=-1 UNION SELECT email, password FROM users

La requête générée ressemblera à :

SELECT id, title FROM recipe WHERE id = -1 UNION SELECT email, password FROM users 

Et renverra la liste des utilisateurs et leur mot de passe au lieu du résultat original. L'impact est encore plus dramatique pour des requêtes de type UPDATE / DELETE qui peuvent être exploité pour détruire une partie de votre base de données.

Comment se protéger

La règle d'or à respecter quand on crée une application web et de ne jamais faire confiance aux données qui proviennent de l'extérieur. Aussi, lorsque l'on utilise des données externes pour générer une requête SQL on évitera au maximum la concaténation et on préfèrera utiliser une requête préparé. Le principe est de laisser le système de gestion de base de données gérer les paramètre et ainsi éviter l'injection.

db.prepare('SELECT * FROM recipes WHERE id = ?').get(req.param('id'))

Dans le cas de PHP

$stmt = $pdo->prepare("SELECT * FROM recipes WHERE id = ?"); 
$stmt->execute([$_GET['id']);
$data = $stmt->fetchAll();

Si vous utilisez un ORM pour communiquer avec une base de données la même règle s'applique et assurez vous de bien utiliser du code qui va générer une requête préparée.

Détecter les injections

Pour vérifier si votre site est sensible aux injections SQL vous pouvez utiliser l'outil sqlmap

Publié
Technologies utilisées
Auteur :
Grafikart
Partager