Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/11/2011, 14h57   #1
Invité de passage
 
Inscription : juin 2009
Messages : 15
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 15
Points : 3
Points : 3
Par défaut Apparition d'antislashes lors d'insertions en BDD

Bonjour tout le monde,

Sur un serveur LAMP, j'ai mis en place un formulaire qui, via la méthode POST, insère des données dans une table mysql.

Les magic quotes étant à off (j'ai vérifié deux fois avec les fonctions phpinfo() et get_magic_quotes_gpc() ), je me contente de faire un seul filtre avant l'insertion des données dans la table :

Code :
$data = mysql_real_escape_string($_POST['data']);
// J'insère ensuite $data dans la table via une requête classique INSERT

Et bien curieusement, les données enregistrées en table contiennent des antislashes devant les apostrophes... J'ai mis en place une solution temporaire avec stripslashes()... Mais ça me paraît vraiment pas propre, pas sécurisé, et surtout, j'aimerais comprendre d'où viennent ces antislashes ?

=> Savez-vous d'où ils peuvent venir ?

Merci par avance pour votre aide
Voyageur Du Net est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 15h50   #2
Membre expérimenté
 
Inscription : janvier 2007
Messages : 620
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 620
Points : 553
Points : 553
Bonjour,
Dans une portion de la description de cette fonction :

Citation:
mysql_real_escape_string() protège les caractères spéciaux de la chaîne unescaped_string, en prenant en compte le jeu de caractères courant de la connexion link_identifier. Le résultat peut être utilisé sans problème avec la fonction mysql_query(). Si des données binaires doivent être insérées, cette fonction doit être utilisée.

mysql_real_escape_string() appelle la fonction mysql_escape_string() de la bibliothèque MySQL qui ajoute un slash aux caractères suivants : NULL, \x00, \n, \r, \, ', " et \x1a.

Cette fonction doit toujours (avec quelques exceptions) être utilisée pour protéger vos données avant d'envoyer la requête à MySQL.
kabkab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 08h53   #3
Invité de passage
 
Inscription : juin 2009
Messages : 15
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 15
Points : 3
Points : 3
Merci pour cette réponse Kabkab (Kabyle comme moi ?),

Une chose que je pensais savoir, mais j'ai des doutes :

Admettons,
Code :
 $data = "Phrase'avec'des'apostrophes";
Si j'insère tel quel $data dans une table, la requête plante à cause des apostrophes.
Par contre, si avant insertion j'échappe les apostrophes avec
Code :
$data = mysql_real_escape_string($data);
le requête fonctionne, et la chaine de caractère enregistrée en base est bien "Phrase'avec'des'apostrophes"

Mysql comprend que les antislashs sont des caractères d'échappement.

Ce qui me fait penser que, je ne sais comment, la variable insérée est
Code :
$data = 'Phrase\\'avec\\'des\\'apostrophes';
(comme si un double "échappement" s'était produit).
Voyageur Du Net est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h34.


 
 
 
 
Partenaires

Hébergement Web