Le principe de l'injection est d'espérer que le code est mal écrit et que des données saisies sont fusionnées telles quelles
exemple ,
on saisi "Jean Valjean" : insert into noms( nom ) values ( 'Jean Valjean') ;
mais
si la saisie est "Jean Valjean') ; drop table users ; select 1.2 where ( 1 = 1"
on aura : insert into noms( nom ) values ( 'Jean Valjean') ; drop table users ; select 1.2 where ( 1 = 1') ;
qui est correct pour mysql mais pas pour vous.
Solution : il faut quoter proprement le code entré , ce qui aurai plutôt donné :
insert into noms( nom ) values ( 'Jean Valjean'') ; drop table users ; select 1.2 where ( 1 = 1') ;
l'apostrophe doublé préserve la falsification
programmez vous php 5.3 ou plus avec l'extension mysqli ? Voyez la documentation de prepare
$input = "Jean Valjean') ; drop table users ; select 1.2 where ( 1 = 1" ;
$sth = $dbh->prepare("insert into noms( nom ) values ( ? )");
$sth->bind_param($input, $name);
$sth->execute();
select * from noms where nom like '%Valjean%' ;
nom
Jean Valjean
Jean Valjean') ; drop table users ; select 1.2 where ( 1 = 1
2 rows , 0 warning, 0 errors.
plus aucune saisie ne peut être détourner