Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insérer du code (js,php,xhtml) en base de données Mysql

Je suis vraiment bloquer HELP please !

Sujet résolu
    15 novembre 2010 à 1:08:19

    Bonjour à tous,

    Voila je suis en train de conçevoir un site que je vais mettre en téléchargement et j'ai eu la bonne idée de mettre un formulaire pour que les webmaster puisse y inserer du code, mon formulaire contient 2 champs text un pour inserer du code dans le <header> et un pour le footer <body>, de cette maniere les webmasters pourront facilement inserer un script de statistique par exemple. donc j'ai voulu tester en y inserant le script de tracking de phpmyvisites que voici :

    Citation : undefined

    <!-- phpmyvisites -->
    <a href="http://www.phpmyvisites.us/" title="phpMyVisites | Open source web analytics"
    onclick="window.open(this.href);return(false);"><script type="text/javascript">
    <!--
    var a_vars = Array();
    var pagename='';

    var phpmyvisitesSite = 1;
    var phpmyvisitesURL = "http://www.mon-site.com/phpmv2/phpmyvisites.php";
    //-->
    </script>
    <script language="javascript" src="http://www.mon-site.com/phpmv2/phpmyvisites.js" type="text/javascript"></script>
    <object><noscript><p>phpMyVisites | Open source web analytics
    <img src="http://www.mon-site.com/phpmv2/phpmyvisites.php" alt="Statistics" style="border:0" />
    </p></noscript></object></a>
    <!-- /phpmyvisites -->



    J'arrive bien à l'enregistrer en base de données mais mon code est tronqué quant je le récupère dans mon champs text (pour modification par exemple), j'ai bien entendu tout essayé eval(),htmlentities(), mysql_real_escap_string etc...
    mais je n'y arrive pas, mon code s'execute bien dans le header et body et mes statistiques fonctionnent, mais quant il s'affiche dans le champs text il est tronqué ou bien ça bug, aurais-je mal fait quelque chose svp ?
    est t'il préférable d'enregistrer dans un fichier au lieu de mettre en BDD ?

    merci de votre aide la je bloque vraiment !
    • Partager sur Facebook
    • Partager sur Twitter
      15 novembre 2010 à 9:29:51

      Salut,

      déjà bonjour la faille de sécurité, mais en passant la dessus, oui faudrait plutot enregistrer ca dans un fichier, sinon pour l'executer c'est chaud.
      d'ailleurs en l'enregistrant un fichier : boom, une autre faille de sécurité. je te conseille de repasser si tu veux pas que ton site ressemble a un gruyere :p
      • Partager sur Facebook
      • Partager sur Twitter
        15 novembre 2010 à 12:33:02

        On peut sans problème enregistrer du code de n'importe quelle nature dans une base de données.
        Il suffit d'échapper correctement les caractères pour l'insertion, et de faire attention quand on l'affiche pour qu'il ne s'exécute pas (ou qu'il s'execute selon les besoins). Si tu dis que ton code s'exécute correctement dans le header et que tes statistiques sont correctes, cela veut dire qu'il a bien été enregistré ( la fonction mysql_real_escape_string est la plus approriée pour y parvenir).

        Comment affiches-tu le contenu du champ TEXT ? Tu dois utiliser htmlentities (ou au moins htmlspecialchars) pour afficher le contenu du champ sans qu'il ne s'execute.
        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2010 à 20:46:01

          Bonjour lucky et feng,

          Merci pour vos réponse, alors conçernant les failles de sécurité, ce code ne sera ajouter que depuis l'administration du site donc seul l'admin peux étant donner qu'il faut se connecter...et puis en plus je comptait utiliser mysql_real_escap_string donc bon je vois pas ou est le danger, si le mec arrive a acceder a l'administration c'est qu'il a acces a tout de toute maniere. pour répondre a feng, j'utilise htmlentities_decode quant j'utilise un htmlentities et un htmlspecialchars_decode quant j'encode avec htmlspecialchars, mais j'ai pas essayer un mysql_real_escape_string pour l'enregistrement avec un htmlxxx pour la lecture je vais essayer et vous tenire au courant.

          Bon je viens de tester mais malheureusement ca ne fonctionne toujours pas, disont que l'enregistrement ce passe bien en utilisant mysql_real_escape_string, j'ai verifier en BDD le code est complet pas de soucis de ce coté, par contre mon soucis c'est pour récuperer le code dans le champs du formulaire j'utilise un champ texte mutli-ligne et en BDD un champ de type TEXT. j'ai donc essayer avec htmltentities et htmlspecialchars (et aussi avec_decode) mais rien n'y fait il me manque la moitié du script voici ce que je recuper a l'affichage

          Citation : code recuperer a l'affichage


          <script type="text/javascript">
          <!--
          var a_vars = Array();
          var pagename='';

          var phpmyvisitesSite = 10;
          var phpmyvisitesURL = "http://www.mon-site.com/phpmv2/phpmyvisites.php";
          //-->
          </script>
          <script language="javascript" src="http://www.mon-site.com/phpmv2/phpmyvisites.js" type="text/javascript"></script>
          <object><noscript><p>phpMyVisites | Open source web analytics
          <img src="http://www.mon-site.com/phpmv2/phpmyvisites.php" alt="Statistics" style="border:0" />
          </p></noscript></object></a>
          <!-- /phpmyvisites -->">



          vous noterez que en rouge ce sont les balises de fin du champ TEXTAREA qui est lu aussi au lieu d'etre executé :(

          est-ce que je ne doit pas combiner mysql_real_escape_string avec autres chose ?
          merci par avance pour vos réponse

          Cordialement
          • Partager sur Facebook
          • Partager sur Twitter
            15 novembre 2010 à 23:00:26

            D'habitude j'aurais dis d'utiliser le flag ENT_QUOTES avec la fonction htmlentities, mais la dans ton cas je crois que ça ne changera rien. Je peux avoir un extrait de ton code php pour vérifier que tu fais bien comme il faut stp ?
            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2010 à 23:00:26

              Le message qui suit est une réponse automatique activée par un modérateur.
              Les réponses automatiques permettent d'éviter aux modérateurs d'avoir à répéter de nombreuses fois la même chose, et donc de leur faire gagner beaucoup de temps.
              Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter le modérateur en question par MP.


              Merci d'utiliser les balises de code


              Bonjour,

              Les forums du Site du Zér0 disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source.
              Vous avez posté un code source sans utiliser cette fonctionnalité. Pourriez-vous éditer votre message en entourant votre code des balises <code > et </code > ?

              Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

              Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :

              Citation

              int main(int argc, char *argv[])
              {
              long choixOperation;

              printf("Choisissez l'operation a effectuer");
              /* etc. */
              }



              Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :

              int main(int argc, char *argv[])
              {
                  long choixOperation;
              
                  printf("Choisissez l'operation a effectuer");
                  /* etc. */
              }
              


              C'est plus clair n'est-ce pas ? :)
              N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.

              Plus d'informations à ce sujet


              Merci de votre compréhension :)
              Les modérateurs.
              • Partager sur Facebook
              • Partager sur Twitter
                16 novembre 2010 à 1:51:04

                Bonjour,

                oui biensur mais c'est just un champs text avec un echo dedans :
                <textarea name="script_header" class="champ-box-scripts" id="script_header" value="<?php echo $RequeteScript['script_header']; ?>"></textarea>
                


                <?php
                sql_query('UPDATE configuration SET script_header ="'.mysql_real_escape_string($_POST['script_header']).'",script_body ="'.mysql_real_escape_string($_POST['script_body']).'"');
                


                et pour le code que je désire enregistrer
                <!-- phpmyvisites -->
                 <a href="http://www.phpmyvisites.us/" title="phpMyVisites | Open source web analytics" 
                onclick="window.open(this.href);return(false);"><script type="text/javascript">
                 <!--
                var a_vars = Array();
                 var pagename='';
                
                 var phpmyvisitesSite = 1;
                 var phpmyvisitesURL = "http://www.mon-site.com/phpmv2/phpmyvisites.php";
                 //-->
                 </script>
                 <script language="javascript" src="http://www.mon-site.com/phpmv2/phpmyvisites.js" type="text/javascript"></script>
                 <object><noscript><p>phpMyVisites | Open source web analytics
                 <img src="http://www.mon-site.com/phpmv2/phpmyvisites.php" alt="Statistics" style="border:0" />
                 </p></noscript></object></a>
                 <!-- /phpmyvisites -->
                


                Voila j'espere que on va trouver c'est pas bien compliquer mais comme quoi des fois..
                d'ailleur comme tu peux le constater sur ce forum ça marche mais comment ont t'il fait ? :)
                merci par avance

                PS : Message au moderateur, je suis désolé je le sait, mais je n'y arrive pas j'ai selectionner les balises js mais ca mem et juste des balises d'ouverture et fermeture js...sincerement désolé
                • Partager sur Facebook
                • Partager sur Twitter
                  16 novembre 2010 à 1:58:31

                  Tu dois mettre ton code entre ces balises. J'ai édité ton message pour le rendre conforme, tu peux l'éditer toi-même pour voir comment ça fonctionne. C'est le même principe qu'avec la balise <citation>.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 novembre 2010 à 8:59:54

                    @warfar : j'ai bien fais de te demander de poster du code. Pour La balise textarea, la valeur s'écrit entre les balises, comme suit :

                    <textarea>Ton texte</textarea> <!-- Fonctionne -->
                    <textarea value="Ton texte"></textarea> <!-- NE fonctionne PAS -->
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 novembre 2010 à 9:35:55

                      Franchement je ne sait pas quoi dir, dans ce genre de situation on se sent con.....
                      je faisait des copier/coller sur des champs a ligne simple et quant je suis arriver au text area j'ai continué betement, en tout cas tu me sauve merci beaucoup je vais tester tout de suite

                      quant a feyden je vous remercie je vais regarder les balises utiliser pour les prochains post en esperant qu'il n'y en ai pas d'autre :)

                      je vais tester et passerait le sujet en résolut si le prb est reglé
                      -----------------------
                      bon et bien ça fonctionne en utilisant pour la lecture un htmlspecialchars_decode c'est nickel !
                      merci beaucoup feng et encore désolé feyden
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Insérer du code (js,php,xhtml) en base de données Mysql

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown