coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 25 janv. 2008 à 20:15
salut
evangun :)
prennons par exemple
$a=mysql_query('select champ1, champ2 FROM table where id='.$_GET['id']);
on voit dans l'url :
index.php?id=5
on met dans l'url :
index.php?id=5 UNION SELECT login, password FROM users WHERE admin=1 ORDER BY champ1 DESC
en jouant sur le DESC ou ASC, sur les limit, on peut scanner parfois toute une base
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Bien vu Coucou :)
Mais le plus simple reste d'encadrer toutes les valeurs fournies par l'utilisateur par des apostrophes, même les nombres, et de les échapper sytématiquement, et là je pense qu'il n'y a pas de faille.
$a mysql_query('select champ1, champ2 FROM table where id \''.mysql_real_escape_string($_GET['id']).'\');
Malalam dirait de passer à PDO, mais perso j'ai trouvé les perfs trop mauvaises, je suis revenu aux requêtes directes...
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 27 janv. 2008 à 21:26
@sidf : J'ai pris la réponse de Evangun comme étant valide (donc "Réponse acceptée") car il donnait l'exemple le plus concret pour ta réponse : mysql_real_escape_string. Mais la remarque de Coucou747 est très pertinente, tous ce qui passe par l'utilisateur est à prendre avec des pincettes, il ne faut jamais lui faire confiance.
Comme dit le bon vieux proverbe, "le bug le plus connus, c'est l'utilisateur".
@Evangun : Le paradoxe avec les groupements de classes type PDO, Framework (CakePhp, Symfony, Zend), c'est que pour faire un truc tout con, il faut inclure 20 fichiers. C'est utile (et protecteur), mais plus gourmant en ressource. Comme toujours, ca va dépendre du type de travail à effectuer ! :)
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 27 janv. 2008 à 21:43
J'ai pris le choix d'Evangun tout simplement car il à indiqué la méthode mysql_real_escape_string, qui permet d'éviter d'énormes problemes de Sql injection. Maintenant, on peux toujours passer au travers, comme le montre ton exemple.
Par ailleur, j'ai bien précisé que ta réponse méritait aussi son pesan d'or.
T'inquiete Coucou747, on es pas noté par rapport au nombre de "bonnes réponses" :p, tes remarques et tes sources prouvent que tes compétences n'ont pas besoin d'être remises en causes, encore moin au niveau Sql ! :p