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 :

fonction get_magic_quotes_gpc(), c'est vraiment utile ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut fonction get_magic_quotes_gpc(), c'est vraiment utile ?
    Bonjour,

    une petite question sur les antislashes:

    Tout le monde semble utiliser get_magic_quotes_gpc() pour retourner la config serveur et ajouter les antislashes si besoin, avant une insertion dans la base.

    Je n'ai jamais utilisé ça et je fais simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    addslashes(stripslashes($mavariable));
    Ca me parait plus simple, et moins gourmand en ressources...
    Et ça revient au même, non ?
    Et je ne vois que des développements avec get_magic_quotes_gpc()
    Il y a une raison que je n'ai pas saisi ?
    Comment vous faites, vous

  2. #2
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    moi bêtement htmlentities (avec un trim) mais je ne sait pas si c'est suffisant

  3. #3
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    Le problème du htmlentities est qu'il convertit 1 caractère en +ieurs.
    il peut surcharger la base de données.
    Et qu'on ne garde pas les données réelles mais des données "encryptées" en HTML.
    Mais c'est vrai, ça aide en particulier contre les failles CSS. J'utilise plus htmlentities à l'affichage qu'à l'insertion.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    ben pour le savoir c'est facile , tu na qu'as faire le test proposé par php.net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    echo get_magic_quotes_gpc();        // 1
    echo $_POST['lastname'];            // O\'reilly
    echo addslashes($_POST['lastname']); // O\\\'reilly
     
    if (!get_magic_quotes_gpc()) {
       $lastname = addslashes($_POST['lastname']);
    } else {
       $lastname = $_POST['lastname'];
    }
     
    echo $lastname; // O\'reilly
    $sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
    ?>
    Pour les explications technique , faut voir la doc

    de mon coter je l'utilise pour d'autre chose :

    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
    16
    function quote_smart ($valeur){
    		if (phpversion() < "4.3.0") {
    			$valeur = addslashes($valeur);
    		}
    		else {
    			//----stripslashes
    			if (get_magic_quotes_gpc()) {
    				$valeur = stripslashes($valeur);
    			}
    			//---protection si ce n'est pas un entier
    			if (!is_numeric($valeur)) {
    				$valeur = mysql_real_escape_string($valeur);
    			}
    		}
    		return $valeur;
    	}

  5. #5
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    Dans ton exemple, c'est echo addslashes($_POST['lastname']);
    et si tu mets un "stripslashes" dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $lastname = addslashes(stripslashes($_POST['lastname']));
    c'est pas la même chose que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (!get_magic_quotes_gpc()) {
       $lastname = addslashes($_POST['lastname']);
    } else {
       $lastname = $_POST['lastname'];
    }
    ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Salut,
    get_magic_quotes_gpc() te permet d'adapter ton traitement suivant la configuration du serveur.
    Dans ton exemple en effet, il n'y a pas de différences si magic_quotes_gpc est activé. Cependant si il est désactivé et que j'envoie par exemple : \\serveur\fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo addslashes(stripslashes($_GET['variable']));
    --> donne : \\serveur\\fichier ---> problème : correspond à \serveur\fichier (on a perdu un \)
     
     
    avec if (get_magic_quotes_gcp()) blabla ...)
    --> donne : \\\\serveur\\fichier ---> OK
    Donc non, get_magic_quotes_gpc() n'est pas là juste pour faire jolie, mais bien pour faire du code portable

  7. #7
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    Ok, c'est un bon exemple.
    Effectivement mon exemple ne marche pas quand la variable contient des antislashes.
    C'est un cas de figure auquel je n'avais pas pensé, utilisant surtout cette vérif pour des données texte entrées par l'utilisateur et qui ne contiennent pratiquement jamais d'antislashes...
    Merci de cette précision.

  8. #8
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Par défaut
    de plus tu inséres des données "mal formatées" dans ta base de donnée ....

    - plusieurs languages peuvent communiquer avec une base de donnée. Et il n'existe pas toujours l'équivalent addslashes / stripslashs dans le language spécifié.

    - L'export n'est pas toujours destiné à un affichage ( export xml ou autre fait avec autre chose que du php par exemple ! )

Discussions similaires

  1. Le MVVM est-il vraiment utile ?
    Par RichardW2C dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 02/03/2012, 12h17
  2. Réponses: 76
    Dernier message: 29/03/2011, 17h15
  3. Réponses: 238
    Dernier message: 10/03/2011, 22h44
  4. Réponses: 2
    Dernier message: 23/07/2007, 08h00
  5. [FreeBSD] Sudo est-ce vraiment utile ?
    Par Olivier Regnier dans le forum BSD
    Réponses: 3
    Dernier message: 09/06/2007, 18h29

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