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.
Ajouter un commentaire