⚠ AVERTISSEMENT : Toutes les informations fournies dans cette publication le sont à des fins éducatives uniquement. Le site n'est en aucun cas responsable de toute utilisation abusive de ces informations. Vous êtes seul responsable de vos actes devant la loi.
Une requète sql mal écrite peut faire beaucoup de dégats. C’est encore plus vrai avec du code php utilisé n’importe comment.
Imaginez le script php suivant:
$username=$_POST['username'];
$password=$_POST['password'];
$q="select * from `user` where `Userid`='".$username."' and `Password`='".$password."'";
$res=mysqli_query($l, $q);
if(mysqli_num_rows($res)>0)
...
Rien d’extraordinaire. Le programmeur débutant aura vite faite de faire ce genre de code.
Maintenant, imaginez (encore) que la valeur OR ‘1’ = ‘1’ — soit passée dans le champ username.
La requète exécutée serait donc
SELECT *
FROM `user`
WHERE `Userid` = ''
OR '1' = '1' -- and `Password` = 'password'
La deuxième partie du query qui vérifie le password est ignorée grâce au --
et avec la condition '1'='1'
, tout les lignes de la table user sont renvoyés.
Dangereux, non ?
Développeur php, ne créez pas vos requètes de cette manière. D’autres options existent tel que
$sql = "SELECT * from `user` where `Userid` = ? and `Password` = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $_POST['username'], $_POST['password']);
$stmt->execute();
A peine plus long, mais tellement plus sécure.