SQL Injection basique dans un script php

⚠ 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.

(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.

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires