[Hacking ?] Requetes mysql dans un formulaire

Requetes mysql dans un formulaire [Hacking ?] - PHP - Programmation

Marsh Posté le 10-07-2006 à 15:26:27    

J'aimerai savoir si il est possible qu'un internaute puisse faire plomber votre base de données en se servant de la possibilité de remplir un champ de formulaire. Par exemple, quelque chose du style :
 

Code :
  1. $champ=$_POST['champ'];
  2. mysql_query("INSERT INTO table VALUES('$champ')" );


 
Et l'utilisateur entre par exemple dans le formulaire :
truc')" ); mysql_query("DELETE * FROM table" ); mysql_query("INSERT INTO table VALUES('table vidée !
 
Ca enverrai donc un truc du style :

Code :
  1. mysql_query("INSERT INTO table VALUES('truc')" ); mysql_query("DELETE * FROM table" ); mysql_query("INSERT INTO table VALUES('table vidée !')" );


 
Bon c'est un peu tordu, mais est-ce que php est assez sécurisé pour empêcher une telle chose ?

Reply

Marsh Posté le 10-07-2006 à 15:26:27   

Reply

Marsh Posté le 10-07-2006 à 15:30:00    

SQL injection

Reply

Marsh Posté le 10-07-2006 à 15:33:00    

magicquote protège automatiquement, mais c'est bien crade sa façon de faire.
 
sinon, une solution bête et méchante, mais infaillible (qui marche comme magicquote, mais "à la mano" ) :
 
$sql = "insert into toto values (".quote($maval)." );"
 
function quote($str)
{
    return "'".replace($str, "'", "''" )."'";
}


Message édité par Arjuna le 10-07-2006 à 15:34:08
Reply

Marsh Posté le 10-07-2006 à 15:35:28    

le mieux étant, je sais pas si mysql et php supportent, d'utiliser ce qu'on appelle une commande parametrée :
 
$sql = "insert into toto values (:toto);"
 
cmd.commandtext = $sql;
cmd.parameter["toto"] = $valeur;
cmd.execute();
 
(simple algo, puisque de toute façon je ne sais même pas si ça existe en php)
a noter que si ça existe, c'est ce qu'il y a de plus rapide, de plus fiable, et de plus performant. donc si ça existe, oubliez tout ce que vous avez appris, et n'utilisez que ça !

Message cité 1 fois
Message édité par Arjuna le 10-07-2006 à 15:36:17
Reply

Marsh Posté le 10-07-2006 à 15:37:05    

sans oublier mysql_real_escape_string()...
 

Arjuna a écrit :

le mieux étant, je sais pas si mysql et php supportent, d'utiliser ce qu'on appelle une commande parametrée :
 
$sql = "insert into toto values (:toto);"
 
cmd.commandtext = $sql;
cmd.parameter["toto"] = $valeur;
cmd.execute();
 
(simple algo, puisque de toute façon je ne sais même pas si ça existe en php)
a noter que si ça existe, c'est ce qu'il y a de plus rapide, de plus fiable, et de plus performant. donc si ça existe, oubliez tout ce que vous avez appris, et n'utilisez que ça !


 
 
Oui, c'est supporté par MySQL et PHP depuis la 4.1 grâce à l'extension mysqli. (pas toujours activée chez les hébergeurs).


Message édité par soulmanto le 10-07-2006 à 15:42:47
Reply

Marsh Posté le 10-07-2006 à 15:58:08    

En tout cas, pour ceux chez qui c'est activé, à utiliser : c'est vraiment mieux que la construction de requêtes sous forme de string, en terme de performances et de sécurité :)
 
En plus, ça permet de lever les problèmes te type avant de lancer la requête, ce qui est un plus intéressant

Reply

Marsh Posté le 10-07-2006 à 15:59:16    

Sinon il existe des bibliothèques d'abstraction de bdd très bien faite pour php ( genre adoDB) qui permettent de faire ça ( en plus de l'abstraction)

Reply

Marsh Posté le 10-07-2006 à 16:07:12    

le coup des parameters, c'est justement un truc tout droit sorti de OLEDB ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed