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 :

Condition de test sous forme de variable


Sujet :

Langage PHP

  1. #1
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut Condition de test sous forme de variable
    Une question que je ne suis probablement pas le seul à m'être posé. Comment peut on mettre un test sous forme de variable? Est ce irréaliste? ou me suis je totalement fourvoyé?
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $test = "<";
    if ($a $test 3)

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 327
    Points : 15 670
    Points
    15 670
    Par défaut
    tu veux faire ça pour quoi ?
    c'est possible d'exécuter du code PHP qui se trouve dans une chaine de caractères mais c'est très déconseillé pare que tu peux avoir des gros problèmes de sécurité

  3. #3
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Je veux essayer de limiter le nombres de ligne de code en augmentant la "portée" des certaines fonctions.

    La fonction actuelle est semblable a ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function Extract($a, $test){
      if($test == "<"){
          if($a < 100)
          ...
      }
      else {
        if($a > 100)
          ...
      }
    }
    Ceci m'oblige a reproduire inutilement du code.
    Je n'ai aucune idée de la méthode et encore des risque qu'elle représente.
    Merci d'avance

    Riete

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Votre code justement ne présente aucune faille. mathieu faisait référence à eval :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $test = "<";
    eval("\$eval = $a $test 3;");
    if ($eval) {
        // Condition OK
    } else {
        // Condition KO
    }
    C'est donc potentiellement dangereux mais il est possible de limiter les risques en filtrant les données qui y sont utilisées (expression régulière ou autres casts par exemple).

  5. #5
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Merci du tuyau, même si cela ne correspond as tout à fait à ce que je voulais faire.

    Je trouve le code avec eval pas très lisible à posteriori pour le cas ou la maintenance est nécessaire.

    Mais il y a encore une question de culture personnelle qui m'interpelle. Pourquoi ce code serait il potentiellement risqué au niveau sécu?
    Est ce en raison des possibilités de substituer la variable contenant le code a "evaluer" par un autre contenu malin?
    Dans ce cas, cela me semble difficile puisque le code est exécuté au sein même du script sans appel extérieur.

    OK, je ne suis pas un expert en sécu, mais petit à petit l'oiseau fait son nid

  6. #6
    Membre du Club Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Points : 50
    Points
    50
    Par défaut
    Bonsoir,

    Rien de mieux que la doc PHP sur la fonction eval()

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/07/2014, 13h36
  2. Nom d'une feuille sous forme de variable
    Par bigboy dans le forum Excel
    Réponses: 4
    Dernier message: 28/09/2010, 09h28
  3. [MySQL] ligne de code sous forme de variable
    Par serna dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/01/2010, 13h25
  4. Réponses: 4
    Dernier message: 02/03/2009, 00h16
  5. Nom fonction sous forme de variable
    Par zoparg dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2007, 15h51

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