par
Cyrano » 28 oct. 2006, 13:31
je suis pas convaincu par la faille
Ok, alors je vais reprendre l'explication autrement.
Dans les variables superglobales, nous avons entre autres $_POST, $_GET et $_REQUEST : cette dernière contient les deux précédentes.
Supposons que tu utilises la méthode post dans ton formulaire. Les données sont envoyées via $_POST. En apparence, pas de problème. Mais dans ton script, tu te sers non pas de $_POST mais de $_REQUEST.
Dans ton code, tu as ceci :
//..
$nom=$_REQUEST['liste'];
$query = "DELETE FROM pages WHERE page=$nom";
Maintenant, imagines 30 seconde, je suis un sale pirate amateur de destructions gratuites en tous genres. Au lieu de passer par ton formulaire, je mets dans ma barre de navigation une url pointant directement vers la page de traitement que, pour les besoins de l'exemple, je nommerai traitement.php : l'url que je mets est :
http://tonsite.com/traitement.php?liste=0+OR+1+%3D+1
À la réception, je récupère : "0 OR 1 = 1" : ta requête va donc devenir :
Et partant de là, à ton avis, il va se passer quoi ?

[quote="artotal"]je suis pas convaincu par la faille[/quote]
Ok, alors je vais reprendre l'explication autrement.
Dans les variables superglobales, nous avons entre autres $_POST, $_GET et $_REQUEST : cette dernière contient les deux précédentes.
Supposons que tu utilises la méthode post dans ton formulaire. Les données sont envoyées via $_POST. En apparence, pas de problème. Mais dans ton script, tu te sers non pas de $_POST mais de $_REQUEST.
Dans ton code, tu as ceci :
[php]//..
$nom=$_REQUEST['liste'];
$query = "DELETE FROM pages WHERE page=$nom";[/php]
Maintenant, imagines 30 seconde, je suis un sale pirate amateur de destructions gratuites en tous genres. Au lieu de passer par ton formulaire, je mets dans ma barre de navigation une url pointant directement vers la page de traitement que, pour les besoins de l'exemple, je nommerai traitement.php : l'url que je mets est : http://tonsite.com/traitement.php?liste=0+OR+1+%3D+1
À la réception, je récupère : "0 OR 1 = 1" : ta requête va donc devenir :
[code]DELETE FROM pages WHERE page=0 OR 1 = 1;[/code]
Et partant de là, à ton avis, il va se passer quoi ? :-k