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 :

Mode anti insulte dans un livre d'or [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut Mode anti insulte dans un livre d'or
    Bonjour à toutes et à tous,


    Je viens vers vous pour vous présenter mon problème actuel sur la sécurisation de mon livre d'or.
    historiquement parlant, j'ai ajouté stripslashes pour que mon texte soit lisible avec à ç é à et ' et non \' .
    Ensuite j'ai donc ajouté htmlspecialchars pour éviter l'envoi de code html dans le message, voici mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <head>
     
    <meta name="description" CONTENT="">
    <meta HTTP-EQUIV="IMAGETOOLBAR" content="no" SCROLLING="yes" >
    <meta name="keywords" CONTENT="">
    <head>
     
      <title></title>
     
    </head>
    <body>
     
     
    <?php
     
    //Ouverture du fichier en écriture
     
    $fp = fopen("/htdocs/livredor/guestbook.txt",a);
     
     
    //On convertit les caracteres html
     
    echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1'));
     
    $nom = htmlspecialchars(stripslashes($_POST['nom']));
     
    $mail = htmlspecialchars(stripslashes($_POST['mail']));
     
    $message = htmlspecialchars(stripslashes($_POST['message']));
     
    $d = date ( "d/m/Y H:i:s" );
     
    function censorWords($find=array(),$text=null){
    $replace = ' **** ';
    return preg_replace($find,$replace,$text);
    }
     
    /*liste des mots a filtrer ou expression */
    $file = 'guestbook.txt';
    $find = array(
    '/ggggggg gg gggggg\s/i',
    '/ggg\s/i',
    '/ggggggg\s/i',
    '/gg ggggggg\s/i',
    '/ggggggggggggggggggg\s/i',
    );
    $newmail = censorWords($find,$mail);
    $newnom = censorWords($find,$nom);
    $newmessage = censorWords($find,$message);
     
    $page = "";
     
    $newmail = $mail;
    $newnom = $nom;
    $newmessage = $message;
     
    $page .= "&nbsp;<b>$newnom</b> &nbsp; ($newmail)$d<br> &nbsp;le:&nbsp; $d<br>&nbsp;$newmessage<br><hr>\n";
     
    //On rajoute le message
     
    fwrite($fp,"$page" ,strlen("$page"));
     
    //fermeture du fichier
     
    fclose($fp);
     
    ?>
     
    <?php include("guestbook.php"); ?>
    </body>
    </html>
    Mon problème vient du fait que mon module anti-insulte ne trouve qu'un seul mot et ne recherche pas les autres ( je parle de ceux qui sont renseignés évidement dans la liste ),

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function censorWords($find=array(),$text=null){
    $replace = ' **** ';
    return preg_replace($find,$replace,$text);
    }
     
    /*liste des mots a filtrer ou expression */
    $file = 'guestbook.txt';
    $find = array(
    '/ggggggg gg gggggg\s/i',
    '/ggg\s/i',
    '/ggggggg\s/i',
    '/gg ggggggg\s/i',
    '/ggggggggggggggggggg\s/i',
    );
    $newmail = censorWords($find,$mail);
    $newnom = censorWords($find,$nom);
    $newmessage = censorWords($find,$message);
    j'ai testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $newmessage = 1;
    echo $newmessage;
    var_dump($newmessage);
    et j'obtient sur mon test
    petit test pour reprendre l'encodage de la fonction htmlspecialchars combinée avec la fonction stripslashes. petit test code html <a href="#top">top</a> test des caractères spéciaux : "'"'((__àç_é&=)àç, et des insultes **** et en plus tu es un ( modéré manuellement)string(288) "
    Merci par avance à toutes celles ou tout ceux qui m'aideront
    bonne journée à tous

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu spécifié un espace à la fin de ton expression.
    Donc le dernier mot de ta chaine dans ton exemple n'est pas remplacé.

    D'ailleurs tu n'as pas besoin d'expression régulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    function censorWords($find=array(),$text=null){
    $replace = ' **** ';
    return str_replace($find,$replace,$text);
    }
     
    $find = array(
    'gros vilain',
    'coquin',
    'canaille'
    );

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Merci pour ta réponse, je testerais ce soir.
    Donc je retire \s/i ?
    Que veux tu dire par " tu n'as pas besoin d'expressions régulières " ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans ton code du début tu utilises des expressions régulières, mais ce n'est pas nécessaire comme le montre mon code.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    j'ai donc essayé et j'ai comme erreur

    Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /htdocs/livredor/writeguest.php on line 45

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a pas preg_replace dans le code que je t'ai donné.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    hum je sors....
    la fatigue, je regarde demain merci pour tout à demain

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    C'est bon j'ai réussi à modifier et je t'en remercie infiniment,
    ayant une autre question je vais ouvrir un autre topic

  9. #9
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut
    Je trouve que l'utilisation des regex n'était pas si mal, ou, au moins, l'utilisation de str_ireplace() pour que cela ne soit pas sensible à la casse,

    Car, si je ne dis pas de bêtise, sans cela "CANAILLE" ou même "Canaille" ne sera pas remplacer avec str_replace.

    donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function censorWords($find=array(),$text=null){
    $replace = ' **** ';
    return str_ireplace($find,$replace,$text);
    }
    ou, via la regex (mais, logiquement, plus gourmand en ressource, et peu utile dans ce cas précis):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function censorWords($find=array(),$text=null){
    $replace = ' **** ';
    return preg_replace($find,$replace,$text);
    }
    (mais avec le /i sur les paterns, par exemple: '/canaille/i')


    ---

    Edit: Au cas ou, une petite précision sur la question "Que veux tu dire par " tu n'as pas besoin d'expressions régulières " ? "

    Enfait les str_[function] cherchent un text brut simple, alors que les fonctions preg_[function] travaillent avec des expressions regulières (appelée aussi regex)

    La différence c'est que tu peux préciser dans le pattern (la recherche regex) de très nombreuse variable.
    Par exemple:

    '\canaille|coquin\' qui cherchera tout les mot "canaille" OU "coquin",
    Ou encore '\gr[ioa]s\' qui cherchera tout les mot "gris" "gros" ou "gras",
    Et il y a encore de très nombreuses fonctions utilisable dans les regex.



    Les expressions régulière sont trèèèèès puissantes, sont utilisées un peu partout (Javascript par exemple (ainsi que la plupart des langage de programmation), Le bash Linux aussi etc...).

    Enjoy

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

Discussions similaires

  1. Supprimer les insultes dans un texte oui mais...
    Par psychoBob dans le forum Langage
    Réponses: 19
    Dernier message: 16/04/2008, 15h03
  2. Code pour anti-bot dans DLL Isapi Web
    Par fredfred dans le forum Web & réseau
    Réponses: 5
    Dernier message: 20/04/2006, 17h01
  3. Des anti-slashes dans ma newsletter
    Par dolphi dans le forum Langage
    Réponses: 3
    Dernier message: 09/02/2006, 19h54
  4. problème dans un livre d'or avec php et mysql
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/12/2005, 18h04

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