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

Langage PHP Discussion :

Suppression magic quote ; solution de remplacement


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 66
    Points : 39
    Points
    39
    Par défaut Suppression magic quote ; solution de remplacement
    Bonjour,

    Nous étions sur une ancienne version de php et utilisions les magics quotes. Tout allait à merveille jusqu'à ce que l'on change de version php (PHP Version 5.4.4)
    Les magics quote ayant été supprimées de cette version, nous pensions qu'il suffirait de ne plus les utiliser pour que tout continue comme avant. Hélas non, maintenant impossible d'ajouter en base des chaines de caractères du type
    " bonjour l'enfant"

    nos requêtes sont écrites ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "UPDATE table SET champ1 = ' ".$variable." ' ";
    Si, dans $variable, il y a le caractère apostrophe, c'est foutu, ça n'enregistre rien.

    Comment pourrions nous changer cela de manière "simple" (c a d que nous avons environ 1000 requêtes écrite ainsi en php et que les changer à la main n'est pas une perspective enchanteresse ^^)

    Changer la configuration serveur ? Trouver une fonction miraculeuse ? Nous pendre

    Merci !

    Xeno

    Ps : question annexe qui n'a rien à voir : admettons que l'on sache qu'une variable est de type int, il est plus optimisé de faire un IF ( $var == 1) ou if ($var === 1)
    (en gros, la comparaison avec comparaison de type est + opti ou moins opti que la comparaison simple?)

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je ne pensais pas qu'il y avait encore des gens qui utilisaient les magic quotes. C'est quand même obsolète depuis PHP 5.3.0 (donc pas loin de 5ans), et c'était déjà déconseillé avant.
    Tu as un vieux code avec application du principe n°1 de maintenance "Tant que ça marche, on ne touche à rien" ?

    Mauvaise nouvelle : ton code est une gigantesque faille de sécurité et a priori, ce n'est pas réparable par une simple configuration.

    Etant donné que tu utilisais les magic_quotes, je suppose que les requêtes sont exécutées par l'API mysql (autrement dit, par des fonctions mysql_query).
    Si c'est bien le cas, il faut encadrer toutes les variables correspondant à du texte avec la fonction mysql_real_escape_string.

    Exemple
    Si tu avais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "UPDATE table SET champ1 = ' ".$variable." ' ";
    mysql_query($query);
    Il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "UPDATE table SET champ1 = ' ".mysql_real_escape_string($variable)." ' ";
    mysql_query($query);
    L'autre possibilité consiste à utiliser addslashes sur toutes les variables en entrée (genre récupérées dans $_POST ou $_GET), mais c'est moche, moins sécurisé, ça peut entrainer des effets de bords et ça va sans doute prendre autant (voire plus) de temps.

    Au passage : l'API mysql_ est maintenant obsolète (depuis PHP 5.5.0), donc vouée à disparaitre dans les versions futures.

    Pour les comparaisons, ça dépend de ce que tu veux faire.
    Par exemple, si tu récupères une donnée à partir d'un formulaire, ce sera systématiquement une chaine. Donc même si tu as tapé 1 dans le champ "mon_champ" de ton formulaire, $_POST['mon_champ'] === 1 va renvoyer faux.
    Personnellement, les seuls cas pour lesquels j'utilise ===, c'est si je teste le retour d'une fonction qui peut renvoyer false en cas d'erreur, histoire d'éviter les problèmes si jamais le retour de la fonction qui marche est 0.

Discussions similaires

  1. [SP-2007] Suppression d'une solution impossible
    Par aityahia dans le forum SharePoint
    Réponses: 1
    Dernier message: 28/05/2009, 12h40
  2. magic quotes et superglobales ?
    Par tintin72 dans le forum Langage
    Réponses: 4
    Dernier message: 01/04/2009, 11h53
  3. Magic quotes et mysql
    Par ikvat dans le forum Installation
    Réponses: 1
    Dernier message: 27/12/2006, 23h56
  4. Réponses: 3
    Dernier message: 27/11/2006, 19h00
  5. [SQL] magic quotes ou double apostrophes pour échapper apostrophe
    Par zorian dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/03/2006, 17h23

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