8768 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Non il n'y a pas que ' et " de dangereux. \ permet par exemple d'échapper un ' ou " qui suit, donc si \ n'est pas échappé, le fait d'échapper ' et " ne protège absolument rien du tout. Le caractère Ctrl+Z également appelé \e ou \27, \1F ou Escape permet aussi parfois (plus rarement) de faires des échappements. Le caractère nul \0 est plus méconnu et permet quant à lui de stopper prématurément une chaîne lorsque des API en C sont utilisées. Pour rappel PHP est compilé en C et l'écrasante majorité de ses bibliothèques aussi, donc c'est un piège classique qui n'est pas seulement valable dans les bases de données.

Juste pour info, la fonction PDO::quote est encore mieux que mysql_real_escape_string, parce qu'en plus d'échapper correctement la chaîne, elle l'entoure automatiquement d'apostrophes. Du coup on peut l'utiliser indifféremment pour quasiment tout, chaînes, nombres, dates ou autres.

Attention aussi à échapper % et _ en plus si on utilise LIKE, ou les métacaractères dans le cas des regex; on l'oublie facilement et ceux-là ne sont pas couverts par les fonctions habituelles.
Bonjour,

Finalement je vais utiliser mysql_real_escape_string.

Les requêtes préparées me semblent un peu lourdes, je les essaierai pour des cas où elles se justifient pleinement, à savoir la même requête exécutée en boucle.

A propos de mysql_real_escape_string., question sans importance mais qui titille ma curiosité : pouquoi faut-il donner un identifiant de connexion en premier argument ?

Je ne vois pas pourquoi une fonction de traitement d'une chaîne a besoin d'un identifiant de connexion.

Autrement, je suppose qu'il faut garder les apostrophes dans la requête :

$requete = "SELECT * FROM table WHERE un='" .  mysqli_real_escape_string ($mid, $un) . "' AND deu='" .  mysqli_real_escape_string ($mid, $deu) . "'"

Modifié par boteha_2 (08 Dec 2015 - 21:51)
Hum j’espère que c'est juste une erreur en écrivant mais il faut utiliser : 'mysqli_real_escape_string' (avec le petit i a la fin de mysql) et non pas 'mysql_real_escape_string' qui est obsolète depuis quelques versions déjà.

Pour ce qui est de la connexion à la bdd, je crois que c'est pour pouvoir encoder les caractères dans le bon charset.
Bonjour,

mathieu1004 a écrit :
Hum j’espère que c'est juste une erreur en écrivant mais il faut utiliser : 'mysqli_real_escape_string' (avec le petit i a la fin de mysql) et non pas 'mysql_real_escape_string' qui est obsolète depuis quelques versions déjà..


OUI, mysqli avec le peitit i.

Ok pour le charset.

Merci.
Si je me souviens bien, il faut un ID de connexion parce qu'en fait ça fait effectivement une requête avec certaines versions de MySQL. Sauf erreur c'est quelque chose du genre SELECT QUOTE machin.
Bonjour,

J'ai installé mysqli_real_escape_string () dans quelques requêtes critiques.

Merci beaucoup de votre aide.
Pages :