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.

pexels-brett-sayles-5480781%20%281%29
(c) Pexels – Brett Sayles

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.

Article précédent Article suivant

Ajouter un commentaire

Merci d'avoir rédigé votre commentaire !