Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sécuriser les données

htmlentities

    20 juillet 2018 à 0:30:35

    Bonjour, 

    je viens de lire l'article intéressant : 

    https://openclassrooms.com/fr/courses/378027-securite-php-securiser-les-flux-de-donnees

    je ne suis pas très fort en code, et je m'excuse d'avance pour les énormités que je pourrais dire, mais j'essaye de comprendre et j'espère avoir de l'aide sur ce sujet.

    J'ai placé sur tous mes $_GET et $_POST de mes pages le fameux mysqli_real_escape_string (en lieu et place du mysql_real_escape_string préconisé de l'époque)

    ($_GET provenant de l'URL, et $_POST de formulaires)

    une fois que toutes mes valeurs sont récupérées, il faudrait si j'ai bien compris, utiliser htmlentities pour afficher mes infos....

    néanmoins en faisant cela, j'obtiens pour l'affichage d'un commentaire (par exemple) : 

    &quot;Un et double&quot;, ainsi sommes-nous tous, et le po&egrave;te l'a saisi et exprim&eacute; avec une justesse vertigineuse.<br /> 

    au lieu de 

    "Un et double", ainsi sommes-nous tous, et le poète l'a saisi et exprimé avec une justesse vertigineuse. 

    DEUX QUESTIONS : 

    - Est-ce que j'ai bien compris ce qu'il faut faire ?

    - En mettant htmlentities pour me protéger, comment faire pour que mes textes s'affichent correctement ?

    Merci d'avance pour vos éclairages.



    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2018 à 10:18:04

      Bonjour,

      Il faudrait déjà voir comment tu insères les données dans la bdd, tu ne devrais pas avoir inséré les caractères html.

      Sinon, c'est le comportement normal de htmlentities.

      • Partager sur Facebook
      • Partager sur Twitter
        20 juillet 2018 à 14:59:49

        Dans la bdd c'était inséré jusqu'à présent avec un traitement nl2br et addslash je crois...

        • Partager sur Facebook
        • Partager sur Twitter
          20 juillet 2018 à 15:48:49

          Alors ce n'est pas bon. Tu dois avoir les données brutes dans la bdd.

          Par exemple : é et non pas &eacute;, et un saut de ligne et non pas <br>

          • Partager sur Facebook
          • Partager sur Twitter
            20 juillet 2018 à 16:30:13

            Dans ma BDD l'insertion de l'exemple est la phrase brute avec un é pas de code... mais un ne à la fin

             Pourtant avec commentaires le é est transformé. ..etc

            En gros qqun pourrait m'expliquer comment traiter l'info entrante dans la bdd et comment gérer l'affichage... le tout en prenant en compte l'article sur la sécurité.... car je suis encore plus perdu qu'avant ma question...

            Merci

            • Partager sur Facebook
            • Partager sur Twitter
              20 juillet 2018 à 16:37:46

              Rickways a écrit:

              Dans ma BDD l'insertion de l'exemple est la phrase brute avec un é pas de code... mais un ne à la fin


              Désolé, je ne comprends pas ta phrase.

              Pour l'insertion en bdd, si tu n'utilises pas de requête préparée, il faut en effet utiliser mysqli_real_escape_string() mais rien d'autre.

              • Partager sur Facebook
              • Partager sur Twitter
                20 juillet 2018 à 23:14:44

                Bonjour

                Désolé, je viens de me relire et ce n'était pas très compréhensible.

                Je vais essayer de faire mieux.

                Je viens donc de tester : 

                Insertion dans ma BDD d'un texte à l'aide d'un mysqli_real_escape_string()  sur la donnée texte d'un commentaire.

                Affichage dans la BDD

                 

                J'obtiens donc bien un texte BRUT avec apostrophe, retour à la ligne...

                Pour l'affichage je passe un coup de htmlentities à ma variable texte et j'obtiens l'affichage suivant : 

                On observe bien que le retour à la ligne présent dans la bdd (sans codage) n’apparaît pas en ligne...

                Une astuce ?

                • Partager sur Facebook
                • Partager sur Twitter
                  20 juillet 2018 à 23:54:45

                  J'ai trouvé une pseudo réponse qui pourra peut-être aidé ceux qui liraient ce topic.

                  En mettant : 

                  nl2br(htmlentities($list["texte"]))

                  mon texte s'affiche correctement avec les saut de ligne.

                  Par contre, vu que je suis en train de refaire tout mon site, tout les textes envoyés précédement ne s'affichent pas correctement.


                  Exemple, je prends un commentaire (présent dans la base depuis 6 ans), qui lui n'a jamais subi le fameux mysqli_real_escape_string, voici son affichage : 

                  Comment est-ce que je peux faire pour que tous mes textes contenu dans ce champs de la BDD puisse en quelque sorte subir un mysql_real_escape_string ? afin de s'afficher normalement ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 juillet 2018 à 10:20:05

                    Tu peux utiliser html_entity_decode()

                    Tu devras par contre traiter toute ta table pour avoir quelque chose de propre.

                    Pour nl2br(), c'est en effet ce qu'il faut utiliser, mais à l'affichage seulement également.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 juillet 2018 à 13:18:09

                      Bonjour à tous, 

                      et merci pour votre aide... 

                      je pense être venu à bout de cette petite partie de refonte du site, et grâce à vous...

                      Pour résumer (ça peut toujours être utile)

                      Niveau sécurité,

                      il faut utiliser pour toutes les données qui vont se rendre dans la bdd : mysqli_real_escape_string

                      il faut utiliser pour toutes les données qui s'afficheront: htmlentities()

                      Pour le problème des retour à la ligne qui ne s'affichaient pas, j'ai utilisé à l'affichage : nl2br(htmlentities($list["texte"]))

                      Pour convertir les anciennes bases de données qui contiennent des codes html partout (&ecirc; ou <br /> etc...) et qui ne s'afficheraient pas correctement, j'ai été obligé de convertir toutes ma base de données avec html_entity_decode()

                      pour cela j'ai fait une copie de ma bdd (au cas où et j'ai bien fait) et j'ai mis la boucle suivante : 

                      $req = 'SELECT * FROM commentaires2BAK';
                      
                      $result = mysqli_query($bdd,$req) or die ('Execution de la sélection impossible');
                      
                      while($list = mysqli_fetch_array($result,MYSQLI_BOTH))
                      
                      	{
                      
                      $id = $list['id'];
                      
                      $texte = $list['texte'];
                      
                              $texte = str_ireplace ( "<br />", "", $texte);
                      
                       	$texte = mysqli_real_escape_string($bdd,$texte);
                      
                      
                      	$texte = html_entity_decode($texte);
                      
                      
                      
                      mysqli_query ($bdd,"UPDATE commentaires2 SET texte='$texte' WHERE id='$id'") or die ('Execution de la sélection impossible');	
                      
                      	}

                      Je ne suis pas sûr à cent pour cent de toutes les lignes, mais le résultat final est le bon...

                      après les commentaires, je vais m'attaquer aux forum, je crois, il y a du lourd là aussi...

                      Merci encore



                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 juillet 2018 à 1:23:53

                        Coucou Lucky; 

                        mon site existe depuis 2001, la base de données est donc pleine à craquer, et passer un vieux site qui n'était même pas en utf8 dans un nouveau format n'est pas évident...

                        j'ai quand même teste sur une seule ligne avant de généraliser...

                        DERNIERE QUESTION, je l'espère...

                        mon texte à convertir comprends parfois des balise autorisées par un bbcode (ce bbcode est transformé en html dans la bdd)

                        on a donc les balises <i><b><font size=""> qui viennent s'ajouter au texte, comme sur cette page : 

                        http://lespoetes.net/sitev4/poeme.php?id=10764&cat=pl

                        Mais du coup, avec le htmlentities, elle ne sont pas interprétées.... comment on fait ?

                        (Dans le code source, j'ai ça : 

                        &lt;b&gt;&lt;i&gt;&lt;font size=2&gt;Ut Naturae&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;)

                        -
                        Edité par Rickways 22 juillet 2018 à 11:32:52

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Sécuriser les données

                        × 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