Partage
  • Partager sur Facebook
  • Partager sur Twitter

transmettre via url des chaines de caractères spéciaux

    18 février 2007 à 14:56:00

    Bonjour,

    Je dois transmettre des variables dans une url. Ces variables peuvent contenir des caractères spéciaux (à é ç ' " < *).

    De plus ces variables transmises seront à enregistrer dans une base de données sur laquelle des recherches seront effectuées. Ce qui écarte le htmlentities ... en effet si un produit s'appel mévèçà, le htmlentities le traduira par m&eacute;v&egrave;&ccedil;&agrave;. Donc en faisant une recheche sur grave la requête SQL nous sortira comme résultat : mévèçà, ce qui est assez problématique ... :?

    J'utilise donc le htmlspecialchars pour la sécurité.

    Quel est le meilleur moyen pour transmetre ces variables ?
    - urlencode
    - rawurlencode
    - ...

    D'avance merci pour vos réponses. :)



    xenos
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2007 à 15:09:23

      Citation : xenos

      J'utilise donc le htmlspecialchars pour la sécurité.


      la sécurité de quoi ?
      htmlspecialchars n'est pas une mesure de sécurité pour une bdd.

      Et htmlspecialchars ne transforme pas les caractères accentués contrairement à htmlentities.
      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2007 à 15:12:39

        Salut,

        Pour transmettre les paramètres via l'url : urlencode().
        Ensuite tu les remets en texte 'normal' avec la fonction inverse : urldecode()
        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2007 à 15:13:00

          Citation : strucky

          Citation : xenos

          J'utilise donc le htmlspecialchars pour la sécurité.


          la sécurité de quoi ?
          htmlspecialchars n'est pas une mesure de sécurité pour une bdd.

          Et htmlspecialchars ne transforme pas les caractères accentués contrairement à htmlentities.



          htmlspecialchars transforme tout de même les < et > en &lt; et &gt;
          il n'y a donc pas moyen d'entrer de code html de manière illicite, non ?
          • Partager sur Facebook
          • Partager sur Twitter
            18 février 2007 à 15:23:32

            Mais on s'en fout de rentrer des données passées par htmlspecialchars ou non.

            Que tu rentres < ou &lt; dans une base de données, c'est pareil hormis le nombre de caractères.

            • Partager sur Facebook
            • Partager sur Twitter
              18 février 2007 à 15:28:38

              Citation : strucky

              Mais on s'en fout de rentrer des données passées par htmlspecialchars ou non.

              Que tu rentres < ou &lt; dans une base de données, c'est pareil hormis le nombre de caractères.



              selon toi htmlspecialchars et htmlentities ne serviraient à rien alors...
              • Partager sur Facebook
              • Partager sur Twitter
                18 février 2007 à 15:31:28

                Je n'ai jamais dit qu'elles ne servaient à rien.

                Ce sont des fonctions d'affichages et pas de protestion de données.
                Elles servent entre autres à éviter l'insertion de code html dasn une page.
                • Partager sur Facebook
                • Partager sur Twitter
                  18 février 2007 à 15:33:27

                  Citation : strucky

                  Mais on s'en fout de rentrer des données passées par htmlspecialchars ou non.

                  Que tu rentres < ou &lt; dans une base de données, c'est pareil hormis le nombre de caractères.



                  Si je ne m'abuse, ce n'est pas du tout la même chose de rentre < ou &lt; !

                  En effet lorsqu'on fera un echo sur les informations enregistrées si les < et les > sont laissés tels quels le navigateur va faire ce qu'elles demandent. Par exemple, si dans la base de données il est écrit <b>bonjour</b>, il affichera bonjour.

                  Par contre si dans la base de données, il est écrit &ltb&gt;;bonjour&lt;/b&gt;, il affichera <b>bonjour</b>.

                  De ce fait, on sécurise le site. On empêche que l'utilisateur puisse mettre un code qui se lance et qui effectue des opérations non voulues.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 février 2007 à 15:35:15

                    Citation : strucky

                    Je n'ai jamais dit qu'elles ne servaient à rien.

                    Ce sont des fonctions d'affichages et pas de protestion de données.
                    Elles servent entre autres à éviter l'insertion de code html dasn une page.



                    donc htmlspecialchars ne sert pas à rien si un code est inséré dans une BDD, vu que ce code sera affiché par après.

                    tu veux dire quoi par "Ce sont des fonctions d'affichages" ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 février 2007 à 15:38:09

                      J'ai l'impression de pas me faire comprendre :/

                      Que le htmlspecialchars soit appliqué avant l'insertion ou lors de l'affichage, c'est pareil.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 février 2007 à 15:42:29

                        Citation : strucky

                        Que le htmlspecialchars soit appliqué avant l'insertion ou lors de l'affichage, c'est pareil.



                        Là je suis d'accord avec toi. Sinon pour protéger les données, que recommandes-tu ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 février 2007 à 15:56:24

                          mysql_real_escape_string()

                          Pour MySQL bien entendu.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 février 2007 à 16:12:40

                            Merci de vos interventions.

                            Si j'ai bien compris, il ne faudrait mettre le htmlspecialchars uniquement lors de l'echo lorsqu'on affiche les informations de la base de données ? Et rajouter un mysql_real_escape_string sur les requêtes SQL ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 février 2007 à 16:16:51

                              ...et urlencode() pour l'envoi de données par l'url ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 février 2007 à 16:39:36

                                Vous êtes plusieurs à me conseiller la fonction urlencode, mais pourquoi me conseiller cette fonction et pas rawurlencode ?

                                Après tout d'après ce que j'ai pu comprendre, la seule différence est la façon dont chacune des fonctions prend en charge l'espace. L'urlencode le traduit pas + et le rawurlencode le traduit par %20.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 février 2007 à 1:07:23

                                  Citation : doc php

                                  urlencode() retourne une chaîne dont les caractères non alpha-numériques (hormis -_.) sont remplacés par des séquences commençant par un caractère pourcentage (%), suivi de deux chiffres hexadécimaux. Les espaces sont remplacés par des signes plus (+). Ce codage est celui qui est utilisé pour poster des informations dans les formulaires HTML. Le type MIME est application/x-www-form-urlencoded. Ce codage est différent de celui spécifié dans la RFC 1738 (voir rawurlencode()) : pour des raisons historiques, les espaces sont remplacés par des signes plus (+). urlencode() est pratique pour transmettre des informations via une URL. C'est aussi un moyen de passer des informations d'une page à l'autre.


                                  J'ai mis en gras les parties importantes ;)

                                  rawurlencode() encode une chaîne en URL, pour des noms de fichiers/dossiers
                                  exemple :
                                  $dossier = rawurlencode('ventes et marketing/Bruxelles');
                                  echo '<a href="http://example.com/'.$dossier.'/">lien</a>';


                                  urlencode() encode une chaîne en URL, pour des variables GET
                                  exemple :
                                  $var = urlencode('ventes et marketing/Bruxelles');
                                  echo '<a href="http://example.com/?var='.$var.'">lien</a>';

                                  enfin c'est ce que j'ai cru comprendre
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 février 2007 à 1:17:54

                                    juste histoire d'en remettre une couche, si vous voulez "interdire" le html, utilisez strip_tags(), ca supprimera carrément les balises "dangereuses" ;)

                                    ca me fait penser hier soir a la télé sur la chaine skynews, j'ai été amusé de voir sur une info une phrase avec un beau &pound; :p

                                    bref j'apporte rien au débat, de toute facon la réponse a la question a deja été donnée :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 février 2007 à 1:26:36

                                      À propos de strip_tags(), je ne conseille pas cette fonction, tout ce qu'elle fait c'est supprimer tout ce qui se trouve entre "<" et ">" (voir les avertissements de la doc). Même si ces caractères ne sont pas d'usage courant, il suffit d'un smiley ">_<" pour supprimer la moitié d'un message. Pour moi la solution est clairement htmlspecialchars().
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      transmettre via url des chaines de caractères spéciaux

                                      × 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