IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Back slashes d'échappement enregistrés dans MySQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Par défaut Back slashes d'échappement enregistrés dans MySQL
    Bonjour à tous,

    J'utilise la fonction mysql_real_escape_string pour échapper correctement les caractères ' et " d'une requête MySQL de mise à jour.
    Mais je suis très étonné que MySQL enregistre du coup les chaînes avec les back slashes d'échappement générés par mysql_real_escape_string !!!
    Est-ce normal ?

    Pour l'instant, j'utilise stripslashes pour traiter les chaînes renvoyées par un SELECT, mais ceci me semble bizarre. Est-ce que je suis passé à côté de quelque chose ?

    Merci pour votre aide

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Il faut désactiver les magic_quotes sur ton serveur.

    Un peu de lecture :
    http://us.php.net/fr/magic_quotes

  3. #3
    Membre éclairé Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Par défaut
    Merci pour l'info.

    J'ai ajouté une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_flag magic_quotes_runtime Off
    dans la partie:
    du fichier httpd.conf de mon serveur mais ça n'a pas eu l'effet escompté (les quote sont encore insérés en base).

    Est-ce qu'il faut du coup systématiquement faire appel à des commandes préparées?

  4. #4
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    j'ai l'habitude de faire ceci pour empêcher ce problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public function cleanValues(){
         if(get_magic_quotes_gpc()){
              $static_arr = array('request','stripRecurse'); 
              $_POST = array_map($static_arr, $_POST);       
              $_GET = array_map($static_arr, $_GET);        	 
    	  $_COOKIE = array_map($static_arr, $_COOKIE);        	 
              $_REQUEST = array_map($static_arr, $_REQUEST);
         }
    }
     
        public static function stripRecurse($value){
             $value = is_array($value) ? array_map(array('request','stripRecurse'), $value) : stripslashes($value);         
             return $value;
        }
    Ensuite avant chaque insertion ou mise à jour de chaines en base de données, j'applique juste mysql_real_escape_string (enfin, la fonction d'échappement liée à la connexion courante).

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Citation Envoyé par puybaret Voir le message
    Merci pour l'info.

    J'ai ajouté une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_flag magic_quotes_runtime Off
    dans la partie:
    du fichier httpd.conf de mon serveur mais ça n'a pas eu l'effet escompté (les quote sont encore insérés en base).

    Est-ce qu'il faut du coup systématiquement faire appel à des commandes préparées?
    En changeant magic_quotes_gpc, magic_quotes_runtime et magic_quotes_sybase de On à Off dans le php.ini (comme dans l'exemple 1 de http://us.php.net/manual/fr/security....disabling.php), ça devrait être nettement mieux.

    (Note qu'il faut redémarrer Apache pour que les modifs soient prises en compte.)

Discussions similaires

  1. Formulaire ajout enregistrement dans MySQL
    Par dahu17 dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2008, 13h07
  2. Enregistrer dans Mysql multiples cases a cocher
    Par didiweby dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2008, 17h42
  3. Détection d'enregistrement dans MySQL
    Par fabou3377 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2006, 18h33
  4. Réponses: 10
    Dernier message: 21/06/2006, 14h50
  5. [Efficacite/Redondance] Millions d'enregistrement dans MySQL
    Par nico33307 dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/07/2005, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo