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 :

Interdire les caractères spéciaux [Fait]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Par défaut Interdire les caractères spéciaux
    Bonjour


    Le champ de mon livre d'or fait l'objet d'injection de scripts malveillants mais, heureusement, ces derniers sont inactifs grâce à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_real_escape_string(htmlspecialchars($_POST['commentaire']))
    J'ai utilisé la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("/^[a-z0-9]+$/i",$_POST['commentaire']))
    mais tous les caractères accentués (éèê...) ne sont pas acceptés.
    Dès lors, lorsque le commentaire contenant des caractères spéciaux est soumis, le message n'apparait pas dans la liste des messages laissés.
    A moins de préciser aux visiteurs de ne pas utiliser ces caractères, cela n'est pas très pratique pour la saisie du commentaire.

    Quelle fonction utilisée pour interdire les injections de scripts malveillants ?


    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Je ne vois pas la relation entre ton filtrage regex et ton filtrage des injections SQL.
    Tu peux par exemple utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_real_escape_string(htmlspecialchars($_POST['commentaire']))
    sans remplacer les accents.

    Et au passage, utiliser PDO permet de se protéger des injections SQL de manière très efficace.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Bonjour,

    Je ne vois pas la relation entre ton filtrage regex et ton filtrage des injections SQL.
    Tu peux par exemple utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_real_escape_string(htmlspecialchars($_POST['commentaire']))
    sans remplacer les accents.

    Et au passage, utiliser PDO permet de se protéger des injections SQL de manière très efficace.
    Merci pour ta réponse.

    Mais je n'ai que quelques notions de base en PHP aussi pourrais-tu préciser ton propos :
    Tu peux par exemple utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_real_escape_string(htmlspecialchars($_POST['commentaire']))
    sans remplacer les accents.
    L'usage du PDO est peut être trop complexe à mon niveau de connaissance.

    Pour être plus clair sur mon problème : je retrouve dans les commentaires du livre d'or du code qui semble vouloir afficher quelque chose, d'après mes souvenirs (mais je n'en suis pas sûr : peut-être un script malveillant ?). Je n'en ai pas conservé pour pouvoir le montrer.

    Je ne sais pas ce qui se fait de malveillant sur ce genre de champ.


    Merci pour votre aide

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Si j'en crois la doc (http://fr.php.net/manual/fr/function...ecialchars.php), htmlspecialchars ne remplace pas les accents. c'est htmlentities qui le fait.

    Et si tu veux vraiment matcher les accents, tu peux utiliser cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [-a-z0-9ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Par défaut Syntaxe expression régulière
    Citation Envoyé par jml94 Voir le message
    Si j'en crois la doc (http://fr.php.net/manual/fr/function...ecialchars.php), htmlspecialchars ne remplace pas les accents. c'est htmlentities qui le fait.

    Et si tu veux vraiment matcher les accents, tu peux utiliser cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [-a-z0-9ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]
    Merci pour la rédaction de la syntaxe en expression régulière.

    Les caractères accentués s'affichent désormais dans le commentaire tout en se préservant des scripts malveillants ou autre code...

  6. #6
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Si j'en crois la doc (http://fr.php.net/manual/fr/function...ecialchars.php), htmlspecialchars ne remplace pas les accents. c'est htmlentities qui le fait.

    Et si tu veux vraiment matcher les accents, tu peux utiliser cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [-a-z0-9ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]
    Bonjour

    Cependant avec cette fonction, je m'aperçois qu'on ne peut pas utiliser les ponctuations (, . : ; ! ?...).

    Alors pour clarifier le problème, j'ai rétabli mon script d'origine (donc pas de protection) et voilà les injections qui apparaissent dans les commentaires du livre d'or :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Great piece and I also enjoyed the live chat., <a href="http://foioopcya.freehostia.com/sandra-se2/fremedemene.html">penut butter jelly song</a>, <a href="http://foioopcya.freehostia.com/sandra-se2/fremedemene.html" target="_blank">penut butter jelly song</a>, <a href="http://foioopcya.freehostia.com/sandra-se2/fremedemene.html" target="_blank">http://foioopcya.freehostia.com/sand...emedemene.html</a> penut butter jelly song, 8PP, <a href="http://otdpeah.100webspace.net/metzler-b3/edorou.html">curly permed hairstyles</a>, <a href="http://otdpeah.100webspace.net/metzler-b3/edorou.html" target="_blank">curly permed hairstyles</a>, <a href="http://otdpeah.100webspace.net/metzler-b3/edorou.html" target="_blank">http://otdpeah.100webspace.net/metzler-b3/edorou.html</a> curly permed hairstyles, %-((, <a href="http://iaozuzu.freehostia.com/recaro-b7c/irincth.html">nextdoor nikki pictures</a>, <a href="http://iaozuzu.freehostia.com/recaro-b7c/irincth.html" target="_blank">nextdoor nikki pictures</a>, <a href="http://iaozuzu.freehostia.com/recaro-b7c/irincth.html" target="_blank">http://iaozuzu.freehostia.com/recaro-b7c/irincth.html</a> nextdoor nikki pictures, %-(, <a href="http://uqoporuxo.freehostia.com/northerndc/poredstharsu.html">compare digital radiography</a>, <a href="http://uqoporuxo.freehostia.com/northerndc/poredstharsu.html" target="_blank">compare digital radiography</a>, <a href="http://uqoporuxo.freehostia.com/northerndc/poredstharsu.html" target="_blank">http://uqoporuxo.freehostia.com/nort...edstharsu.html</a> compare digital radiography, 35760, <a href="http://utoeegeje.100webspace.net/gcp-compf3/pefiabestoni.html">recipe for osso bucco</a>, <a href="http://utoeegeje.100webspace.net/gcp-compf3/pefiabestoni.html" target="_blank">recipe for osso bucco</a>, <a href="http://utoeegeje.100webspace.net/gcp-compf3/pefiabestoni.html" target="_blank">http://utoeegeje.100webspace.net/gcp...iabestoni.html</a> recipe for osso bucco, 8D, <a href="http://iaozuzu.freehostia.com/tabatha-6b/hevedshim.html">air deccan bangalore</a>, <a href="http://iaozuzu.freehostia.com/tabatha-6b/hevedshim.html" target="_blank">air deccan bangalore</a>, <a href="http://iaozuzu.freehostia.com/tabatha-6b/hevedshim.html" target="_blank">http://iaozuzu.freehostia.com/tabatha-6b/hevedshim.html</a> air deccan bangalore, %-[, <a href="http://izelonoh.freehostia.com/sanja-maf4/bequsurskh.html">college pyjama party</a>, <a href="http://izelonoh.freehostia.com/sanja-maf4/bequsurskh.html" target="_blank">college pyjama party</a>, <a href="http://izelonoh.freehostia.com/sanja-maf4/bequsurskh.html" target="_blank">http://izelonoh.freehostia.com/sanja...equsurskh.html</a> college pyjama party, yugmz, <a href="http://etdpijav.freehostia.com/rammed-eaf/owredodise.html">bbs freedom a</a>, <a href="http://etdpijav.freehostia.com/rammed-eaf/owredodise.html" target="_blank">bbs freedom a</a>, <a href="http://etdpijav.freehostia.com/rammed-eaf/owredodise.html" target="_blank">http://etdpijav.freehostia.com/ramme...wredodise.html</a> bbs freedom a, 6530, <a href="http://ixozeh.100webspace.net/naruto-x10/xando.html">caramel apple muffin recipe</a>, <a href="http://ixozeh.100webspace.net/naruto-x10/xando.html" target="_blank">caramel apple muffin recipe</a>, <a href="http://ixozeh.100webspace.net/naruto-x10/xando.html" target="_blank">http://ixozeh.100webspace.net/naruto-x10/xando.html</a> caramel apple muffin recipe, %[[,
    Comment se prémunir de ça ?


    Merci pour votre aid

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Si tu interdis les liens dans tes commentaires, tu vas déjà éliminer 98% des spams (préfères ce terme, l'injection faisant référence à une autre faille).

    Code php non testé : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $myPattern = '/<a[^>]*?href=[^>]+>/i';
    if (preg_match($myPattern, $_POST['commentaire']))
       print "ce commentaire est interdit";

Discussions similaires

  1. [Applet][XML] Ne pas interpréter les caractères spéciaux
    Par leminipouce dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 28/07/2005, 16h15
  2. [SAX] Problème avec les caractères spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 10h07
  3. [C#][ADO] Enlever les caractère spéciaux
    Par Oberown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2005, 18h38
  4. [Jsp] Supprimer les caractère spéciaux d'une chaine
    Par PeteMitchell dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/05/2004, 11h11
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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