Addslashes et stripslashes..???

Résolu
pnichols -  
 pnichols -
Bonjour,

J'aimerais avoir un éclaircissement sur l'utilisation des addslashes et stripslashes en PHP. J'ai essayer de trouver une réponse, mais soit ej trouve rien, ça c'est contradictoire... Alors j'aimerais l'opinion de quelqu'un qui s'y connait...

Est-ce qu'on doit utiliser addslashes ET stripslashes pour les mêmes données..??


Situation:
J'ai un formulaire que les gens peuvent remplir. Pour être sûr que tout est sécuritaire je veux "escaper" les caractères spéciaux ( \ ' " etc...). Je fais un check pour savoir si get_magic_quote_gpc est ON ou OFF. S'il est OFF, je fais moi-même le addslashes.

Le problème vient du fait que je ne suis pas sûr si le addslashes fonctionne, car je ne vois pas de différence dans phpmyadmin, quand je regarde les données. Si je rentre dans le formulaire: aaa\ bbb' ccc", je vois la même chose dans phpmyadmin. J'ai cru avoir lu sur internet que c'est normal, qu'une fois les données passées, MySQL enlève ce qu'il y a de trop, ec qui avait été ajouté.

Alors ma question est, si les données sont déjà bonnes dans MySQL, est-ce que je dois faire un stripslashes quand j'affiche les données à l'écran..???

Et si stripslashes est pas nécessaires, à quoi il sert vraiment si MySQL fait le ménage sur les données une fois passées..? Comment je fais pour avoir ex: aaa\\ bbb\' ccc\" dans MySQL, si il est supposé cleaner ça..???


J'espère que vous comprenez un peu tout ça..
Merci,
A voir également:

2 réponses

switch
 
"échapper" les caractères spéciaux des chaînes n'est nécessaire que pour les requêtes qui contiennent directement ta chaîne elle-même ( la variable PHP, donc par exemple à l'insertion ou à la modification de données). c'est là qu'elles peuvent interférer avec la requête (par exemple en la fermant plus tôt à cause de quotes dans la chaîne).

les backslashes ne sont donc plus nécessaires une fois tes données dans la base, et d'ailleurs MySQL repasse une fois sur ta chaîne pour enlever les caractères d'échappement des caractères qui ont été échappés : maintenant que tes données sont en base, elles peuvent être stockées telles quelles, prêtes à être rappelées.

quand tu les rappelles, par exemple avec un select, tu n'as donc pas besoin de renlever les slashes, mysql s'en est déjà occupé.

par contre je n'ai pas très bien compris ta dernière question,, mais je vais quand même essayer : mysql ne traite que les backslashes servant à échapper un caractère, donc " L\'ordinateur " devient " L'ordinateur" en SQL mais " L\\\'ordinateur " devient " L\\'ordinateur ", seul le backslash servant à l'échappement est "nettoyé"

enfin la meilleure pratique pour échapper tes chaînes en vue de leur insertion en base est d'utiliser plutôt la fonction mysql_real_escape_string (voir la doc ici : https://www.php.net/manual/fr/function.mysql-real-escape-string.php à la place de addslashes

addslashes est en fait une méthode limitée pour échapper les chaînes, et ne prend en compte que les spécificités du langage PHP, pas celles de ta base, et laisse donc ta chaîne vulnérable à certaines attaques (par exemple, addslashes n'échappe pas les caractères \n et \r ...)
7
pnichols
 
Bon bien merci, ça m'éclaire pas mal sur le sujet...
J'avoue que même après relecture, ma dernière question est pas très clair, mais c'est pas grave.

Merci, pis à l'avenir je vais regarder comment implémenter mysql_real_escape_string parce qu'effectivement, ça semble faire unanimité sur le web quant à sa supériorité à addslashes...
1