String qui contient un ' ou un \

String qui contient un ' ou un \ - PHP - Programmation

Marsh Posté le 13-07-2005 à 14:48:47    

Bonjour,  
voilà mon problème :
je fais une insertion dans la base de donnée MySQL avec une donnée d'un formulaire de cette façon :

Code :
  1. $query="update table set nom='$_POST[nom]' where id_user=$_SESSION[id_user]";


 
Seulement, lorsque la chaine $_POST['nom'] contient un ' ou un \, la requête plante :/
 
Pour contrer le ', j'ai fait ceci :

Code :
  1. $query="update table set nom='".str_replace("'","''",$_POST[nom])."' where id_user=$_SESSION[id_user]";


et

Code :
  1. $query="update table set nom='".str_replace("'","\'",$_POST[nom])."' where id_user=$_SESSION[id_user]";


=> ça fonctionne en local chez moi, mais pas sur le site :/
 
Que puis-je faire ?
Pour \, je n'ai aucune idée ...
 
Merci d'avance :jap:

Reply

Marsh Posté le 13-07-2005 à 14:48:47   

Reply

Marsh Posté le 13-07-2005 à 14:50:48    

Ben ouais [:dawa] Non seulement ça plante, mais en plus ça fait une belle faille [:dawa]
 
Franchement... Ce problème est abordé tout de suite, dès qu'on t'apprend mysql_query. C'est la faille la plus répandu, celle qui fait l'objet de plus d'article. C'est quand-même étonnant que tu ne sois pas tombé dessus. T'as pas dû beaucoup chercher :(

Reply

Marsh Posté le 13-07-2005 à 14:52:01    

désolé, je suis un autodidacte :/
Est-ce que tu peux m'expliquer comment contrer ça ?


Message édité par nero27 le 13-07-2005 à 14:52:10
Reply

Marsh Posté le 13-07-2005 à 14:53:21    

A toi de chercher [:spamafote] Je suis aussi autodidacte, et c'est la première chose que j'ai pu lire [:spamafote]

Reply

Marsh Posté le 13-07-2005 à 14:53:54    

Apprend à chercher, sinon on te verra beaucoup trop souvent ici ;)

Reply

Marsh Posté le 13-07-2005 à 14:55:04    

Et les méthodes que j'ai énoncées, elles sont pas bonnes ? :??:
EDIT: j'ai cherché, mais je ne trouve rien [:sinclaire]
J'ai cherché sur le forum, mais c'est 3 caractères minimumu : je ne vois pas quoi mettre comme termes pour être pertinent :/


Message édité par nero27 le 13-07-2005 à 14:57:48
Reply

Marsh Posté le 13-07-2005 à 14:56:51    

Non ;)
 
Regarde la doc sur http://fr.php.net/manual/en/function.mysql-query.php, et particulièrement certains exemples

Reply

Marsh Posté le 13-07-2005 à 15:00:15    

voire un mysql_real_escape_string, vu que c'est pour mysql...:o


Message édité par skeye le 13-07-2005 à 15:00:22

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2005 à 15:04:27    

Chuuuuut, laissez-le chercher [:dawa]

Reply

Marsh Posté le 13-07-2005 à 15:04:40    

ah l'addslashes : je l'avais complètement oublié lui [:neowen]

Reply

Marsh Posté le 13-07-2005 à 15:04:40   

Reply

Marsh Posté le 13-07-2005 à 15:05:37    

FlorentG a écrit :

Chuuuuut, laissez-le chercher [:dawa]


 :sarcastic:  :pfff:  

Reply

Marsh Posté le 13-07-2005 à 15:14:00    

skeye a écrit :

voire un mysql_real_escape_string, vu que c'est pour mysql...:o


 
Je viens de regarder, c'est intéressant, mais au final, ça fait quasiment la même chose que addslashes, non ?

Reply

Marsh Posté le 13-07-2005 à 15:14:58    

nero27 a écrit :

Je viens de regarder, c'est intéressant, mais au final, ça fait quasiment la même chose que addslashes, non ?


en plus spécifique...ça existe, autant en profiter! ;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-07-2005 à 15:16:02    

nero27 a écrit :

Je viens de regarder, c'est intéressant, mais au final, ça fait quasiment la même chose que addslashes, non ?


Ca escape genre \n en plus, ça peut être utile

Reply

Marsh Posté le 13-07-2005 à 15:17:55    

Ah oui, en effet.
Par contre, ça va me donner un boulot monstre : ajouter sur tout le site stripslashes pour l'affichage :pt1cable:

Reply

Marsh Posté le 13-07-2005 à 15:20:25    

pour l'affichage, c'est :

echo htmlspecialchars(stripslashes($pouet), ENT_NOQUOTES);

Reply

Marsh Posté le 13-07-2005 à 15:23:43    

blablagerezkljrez a écrit :

Pauvre petit
Vaut mieux cela que se faire plomber une BDD par un pyjama


Niveau sécurité, ça ne craint rien car ça ne concerne pas les login de connexion ;)

Reply

Marsh Posté le 13-07-2005 à 17:12:58    

FlorentG a écrit :

pour l'affichage, c'est :

echo htmlspecialchars(stripslashes($pouet), ENT_NOQUOTES);



 
Euh a priori stripslashes est inutile pour l'affichage, si y'a des slashes stockés dans la base c'est que le magic_quotes_gpc est activé et qu'un addslashes/mysql_real_escape_string est fait par dessus, sans stripslashes intermédiaire (à l'envoi, voir l'exemple avec quote_smart() dans la doc de mysql_real_escape_string).
 
Sinon, perso je fais un htmlentities sans ENT_NOQUOTES. Y'a une raison particulière pour htmlspecialchars plutôt que htmlentities ("htmlspecialchars suffit" ?) et le ENT_NOQUOTES ("pas besoin de convertir les quotes" ?). Merci d'avance. :)


Message édité par sielfried le 13-07-2005 à 17:14:41

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 13-07-2005 à 18:25:01    

sielfried a écrit :

Euh a priori stripslashes est inutile pour l'affichage, si y'a des slashes stockés dans la base c'est que le magic_quotes_gpc est activé et qu'un addslashes/mysql_real_escape_string est fait par dessus, sans stripslashes intermédiaire (à l'envoi, voir l'exemple avec quote_smart() dans la doc de mysql_real_escape_string).


ouuuuups :D C'est effectivement une erreur de ma part
 

sielfried a écrit :

Sinon, perso je fais un htmlentities sans ENT_NOQUOTES. Y'a une raison particulière pour htmlspecialchars plutôt que htmlentities ("htmlspecialchars suffit" ?) et le ENT_NOQUOTES ("pas besoin de convertir les quotes" ?). Merci d'avance. :)


Le problème d'htmlspecialchars, c'est qu'il convertit tout (genre les 'é' en &eacute;). Moi ça m'intéresse pas, je fous tout en unicode [:joce] Donc j'ai juste besoin d'escaper les &, < et >. Après y'a un autre cas de figure, c'est quand on echo un attribut (genre <img src="pouet.jpeg /> ), là faut escaper les quotes, donc faut mettre ENT_QUOTES :)

Reply

Marsh Posté le 13-07-2005 à 18:40:47    

Reply

Sujets relatifs:

Leave a Replay

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