Requetes mysql dans un formulaire [Hacking ?] - PHP - Programmation
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, "'", "''" )."'";
}
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 !
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 : |
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).
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
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)
Marsh Posté le 10-07-2006 à 16:07:12
le coup des parameters, c'est justement un truc tout droit sorti de OLEDB
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 :
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 :
Bon c'est un peu tordu, mais est-ce que php est assez sécurisé pour empêcher une telle chose ?