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 :

Execution de code PHP dans une BDD [Fait] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut Execution de code PHP dans une BDD
    Bonjour à tous,

    Je voudrais savoir si il était possible d'executé du code PHP se trouvant lui-même dans une base de donnée MySQL ?

    Car j'ai déjà essayé de mettre le code suivant dans la base de donnée :

    <?php $testVar = 'coucou!'; ?>

    Puis j'affiche le contenu de la table et dans la page je mets ceci :

    print $testVar;

    Mais il me retourne que la variable n'existe pas...
    Il y aurait-il donc un moyen pour executé le code ou pas ?

    Merci d'avance,
    calen

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    si j'ai bien compris :

    Vous stockez dans une base de données une variable du type string qui est du code php, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $code_php = "die('cela marche bien');";
    une fois stocké en bdd ( de préférence dans un champ de type varchar ou text suviant longueur), vous pouvez à tout moment récupérer son contenu et ensuite l'executer (l'évaluer serait plus précis ) comme du code php, ceci grâce à la fonction eval :

    http://fr2.php.net/manual/fr/function.eval.php



    eval -- Exécute une chaîne comme un script PHP
    A noter : Ceci est fortement déconseillé...

    Rasmus Lerdorf ( Le créateur de php ) a une citation que je n'ai pas réussi a retrouver qui dit a peu de chose près ceci :

    Si vous êtes arrivé dans votre script à une situation ou vous n'avez pas d'autres alternative que de faire ceci, revoyez votre analyse.
    *


    Edit :
    j'ai retrouvé la citation de rasmus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If eval() is the answer, you're almost certainly asking the wrong question.
    Fred

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Re bonjour,

    En faite, si je veux executé du code PHP qui se trouve dans une base de donné, c'est que je veux que mon site soit totalement dynamique.

    Pour celà, toute mes pages se trouvent dans ma base de donné, le problème, c'est que quand je veux executé du code PHP, et bien sa pose un petit soucis d'execution...

    Mais si quelqu'un à une autre solution...

    Et pourquoi utilisé eval() serait une mauvaise idée ?

    Calen

  4. #4
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    toute mes pages se trouvent dans ma base de donné
    et pourquoi elles serait pas en fichier.php et la t'aurais pas de probleme ...

    sérieux je vois pas l'intérêt du truc ... tu m'expliques ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut
    En faite, si je veux executé du code PHP qui se trouve dans une base de donné, c'est que je veux que mon site soit totalement dynamique.
    Bon, désolé mais je vais casser un peu ton entrain, je persiste à penser qu'il y a une erreur d'analyse et de perception même de ce qu'est php, il faudrait commencer par un tutoriel simple.


    Fred

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Re - bonjour !

    Bon, désolé mais je vais casser un peu ton entrain, je persiste à penser qu'il y a une erreur d'analyse et de perception même de ce qu'est php, il faudrait commencer par un tutoriel simple.
    Euh... En faite je ne suis pas totalement à mon premier script PHP

    et pourquoi elles serait pas en fichier.php et la t'aurais pas de probleme ...
    sérieux je vois pas l'intérêt du truc ... tu m'expliques ?
    Simple, la possibilité de séparé le contenu du design...
    Ce qui apporte énormement, comme la possibilité d'intégré un panneau d'administration à n'importe quel site web et ce, en quelques minutes et sans trop touché aux site en lui même.

    Et ainsi, la gestion des pages web deviens bien plus aisé par exemple.

    Il y aussi la possibilté de crée des menus entièrement dynamique en fonction de la position de l'internaute par exemple.

    Pour être plus clair, mon système ce base sur ce consepte :
    http://pbnaigeon.developpez.com/tuto...ite-dynamique/

    Voilà voilà,
    Calen

  7. #7
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    et comment tu peux être sûr que dans ta base de données tu n'as que du code ultra-sécurisé ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Re bonjour !

    et comment tu peux être sûr que dans ta base de données tu n'as que du code ultra-sécurisé ?
    Je ne vois pas le rapport en faite...

    Si ton code possède une faille, sa change quoi qu'il soit dans la base de donnée ou directement dans un page .php ?

    J'aimerais aussi savoir pourquoi la fonction eval() est si déconseillé ?

    Calen

  9. #9
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par calenfeaion
    Re bonjour !


    Je ne vois pas le rapport en faite...

    Si ton code possède une faille, sa change quoi qu'il soit dans la base de donnée ou directement dans un page .php ?

    J'aimerais aussi savoir pourquoi la fonction eval() est si déconseillé ?

    Calen
    Ces deux questions sont liées.
    Quand tu as un fichier PHP sur ton serveur, avec du code dedans, tu sais que c'est toi qui l'a mis là, ou au moins quelqu'un en qui tu avais suffisamment confiance pour lui donner des droits sur le système de fichier.
    Quand tu utilises eval, pour exécuter quelque chose, tu ouvres la porte à beaucoup de dangers : tu exécutes du code que tu n'as pas explicitement testé, du code dynamique qui pourrait être fourni par une tierce personne. C'est un code qui pourrait éventuellement exploiter diverses failles de ton application ou de ton serveur.
    L'exécution dynamique de code, depuis une entrée utilisateur ou une base de données (ce qui en théorie revient au même), est considérée comme très dangereuse.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Bonjour !

    Je suis tout à fait d'accord avec toi Eusebius.

    Mais je n'utilises pas cette fonction pour executer du code fournis par les visiteurs du site, mais bien par son administrateur !

    En faite, je crée une interface dans laquelle l'administrateur du site peux créer ces pages et les gérées ( pages qui sont stockés dans une base de donnée ).

    Mais si le Webmaster a envi d'y mettre du PHP, je voudrais que celui-ci soit bien executé, tout simplement.

    Dans mon cas, la fonction eval() ne pose pas de problème, si ?

    Calen

  11. #11
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par calenfeaion
    Dans mon cas, la fonction eval() ne pose pas de problème, si ?
    De mon point de vue, si, c'est ce que je voulais dire par ma dernière parenthèse "ce qui en théorie revient au même".
    La base de données est une ressource comme une autre, et tu ne garantis pas qu'une autre application n'y accède pas !
    D'autre part même l'administrateur, comme n'importe qui, peut rentrer du code buggé dans la base de données, et ce d'autant plus facilement que le code n'a pas été développé dans le même environnement de tests que tes fichiers PHP "statiques".

    Les systèmes de publication existants définissent un metalangage utilisable par la personne qui rentre les informations, et qui est interprété par le script, métalangage qui exclut toute opération dangereuse, et qui est souvent confiné à de la mise en page.

    C'est la raison fondamentale qui fait que sur un forum comme celui-ci, on puisse utiliser des balises "spécifiques", mais en aucun cas le langage HTML dans son intégralité. Même l'inclusion de données HTML est considérée comme une grosse faille, et le fait qu'on passe par une base de données ne change rien : ça reste une entrée utilisateur.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,

    Bon, oublions l'execution du PHP depuis une base de donnée, quand ce code est écrit par quelqu'un d'extérieure.

    Mais j'ai toujours le même problème: mon panneau d'administration fonctionne depuis le même système!

    Puisque les pages d'admininistrations sont directement encodé par moi-même dans la base de données, celà posserais-t-il encore un problème ?

    Calen

  13. #13
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par calenfeaion
    Puisque les pages d'admininistrations sont directement encodé par moi-même dans la base de données, celà posserais-t-il encore un problème ?
    Oui, comme je l'ai dit ton code n'a pas été testé au sein de ton application, et tu es plus susceptible d'avoir oublié des cas.
    Tu es en train de concevoir un système dont la sécurité repose sur l'hypothèse que tu es le seul à l'utiliser (et que tu ne commets pas d'erreurs).

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Bonne nuit

    Bon bon bon.

    Puisque tu y tiens tant, je vais le faire "en dur" alors
    Mais c'est bien parce que j'aime bien ton pseudo hein

    Pour être plus sérieux, explique moi, exemple à l'appui,
    une faille potentiel qui pourrais être crée UNIQUEMENT
    parce que le script est executé depuis une base de donnée.

    Ne le prends pas mal, c'est pour étanché ma soif de savoir
    et pour avoir un exemple précis sur lequel je puisse me dire
    " j'ai bien fait de ne pas faire comme ça "

    Aussi, que veut tu dire par là ?
    ton code n'a pas été testé au sein de ton application, et tu es plus susceptible d'avoir oublié des cas.
    Puisque le code est executé, c'est "comme si" il est executé dans la
    page même, quel est la différence ?

    Merci pour ta patience
    Calen

  15. #15
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Pour être très très très honnête, là j'ai la flemme, je le ferai pas cette nuit
    Mais promis, si l'inspiration me vient...

    Ceci dit soyons clair : c'est ton appli, tu fais absolument ce que tu veux.

  16. #16
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Ayé :
    En tant qu'administrateur, tu peux rentrer du code php dans ta base de données.

    Je suis un méchant pirate. Je vole ta session, par un moyen quelconque. C'est chaud, mais c'est éventuellement possible (si tu veux un autre exemple, je suis ton coloc et je passe sur ton ordi juste après toi...).

    Avec mes droits administrateur, je rentre le code suivant dans la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $handle = opendir('.');
    while (false !== ($file = readdir($handle))) {
      unlink($file);
    }
    closedir($handle);
    }
    Ayé, je t'ai vidé le répertoire courant.
    C'est possible uniquement parce que tu exécute une entrée utilisateur.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Bonjour !

    Bon, je m'incline.

    MAIS, dans ce cas, je persistes à dire que ce n'est
    pas la fonction eval() qui pose problème, mais bien
    le système des sessions !

    Puisque le vol de sessions d'un administrateur est
    toujours dramatique, néanmoins, je t'accordes le
    faite que eval() n'améliore pas la situation

    De plus, faire le panel d'administration "en dur"
    façilite le portage, je n'avais pas pensé à ça

    Encore merci pour tout,
    Calen

    PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $handle = opendir('.');
    while (false !== ($file = readdir($handle))) {
      unlink($file);
    }
    closedir($handle);
    // => }

  18. #18
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Je rajoute deux petits mots :
    - Il y a des mécanismes qui permettent de sécuriser encore plus les sessions (changement systématique du PHPSESSID)
    - eval fait plus qu'empirer la situation, il ouvre une porte directement dans le serveur : par ce mécanisme on peut lancer une commande système, et ensuite si le hacker est doué et s'il y a d'autres failles sur le serveur, c'est l'escalade des privilèges... Sans eval/system, le vol de session est moins grave car les dégâts sont limités à l'application (et souvent, même dans ce cadre les risques sont relativement limités par l'architecture de l'appli).

    Bon développement !

  19. #19
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Citation Envoyé par calenfeaion
    MAIS, dans ce cas, je persistes à dire que ce n'est
    pas la fonction eval() qui pose problème, mais bien
    le système des sessions !
    C'est pas la fonction eval, ni le système de session, c'est le tout : executer du code PHP sans etre sur de sa validité.

    Disons que l'équivalent en normal serait de te piquer tes mdp de ftp et injecter un fichier php pirate. beaucoup plus chaud quand meme.

    d'ailleurs quand tu as un formulaire tu dois bien vérifier qu'il n'y aura pas execution de code pirate dans ce dit formulaire. voila voila.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Bonjour !

    Bon, vous avez sûrement raison !

    De tout façon, je viens d'y pensé, et faire
    le script d'administration "en dur" et bien
    mieux car celà permet une meilleur "portabilité".

    Et une installation plus rapide aussi !

    Encore merci pour toutes vos réponses !
    Calen

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/12/2005, 18h28
  2. Transcrire code PHP dans une DLL
    Par LEK dans le forum C++
    Réponses: 16
    Dernier message: 26/09/2005, 14h17
  3. Mettre un code php dans une variable...
    Par kedare dans le forum Langage
    Réponses: 6
    Dernier message: 19/09/2005, 12h55
  4. [Conception] Code php dans une base de donnée
    Par krfa1 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/09/2005, 10h58
  5. pb eval pour le code php dans une feuille xslt
    Par nipepsi dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 10/09/2004, 11h23

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