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 :

[Système] Spam, alors que formulaire désactivé


Sujet :

Langage PHP

  1. #1
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut [Système] Spam, alors que formulaire désactivé
    Bonjour,

    J'ai un soucis.
    Un de mes sites étant une véritable mine de spam, le temps de trouver un remède au problème, j'ai retiré le formulaire de "commentaire" de celui-ci

    malgré cela, un flux de spam continue à être journellement inséré dans ma base

    Une explication ?

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Les spammeurs n'utilisent pas ton formulaire, ils en ont conservé une copie sur leur ordinateur. Il faut que tu désactives le traitement du formulaire plutôt que le formulaire lui-même.

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    La requete HTTP est forgé est envoyé à ton serveur avec les parametre qu'il faut bien.

    Désactive explicitement l'enregistrement dans le controleur quelque part dans ton code.... Hmmm bôûle de crystal.... à la ligne 25 peut être.

  4. #4
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Donc en fet, tu voudrais que je désactive :

    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
     
    if(isset($_POST['posted']))
    {
     
       // Si tous les champs sont remplis.
     
        if(!empty($_POST['pseudo']) AND !empty($_POST['email']) AND !empty($_POST['message']))
        {
     
        // On nettoie les données (sauts de ligne en trop…).
     
        $pseudo = trim(ucfirst(addslashes($_POST['pseudo'])));
        $email = trim(addslashes($_POST['email']));
        $message = trim(ucfirst(addslashes($_POST['message'])));
     
        // On définit la requête d’insertion.
     
        $insert = "INSERT INTO guestbook VALUES('','$pseudo','$email','$message','$date')";
     
        // On exécute l’insertion des données dans la table.
     
        $query = mysql_query($insert) OR die("Impossible d’ajouter le message<br />". mysql_error());
     
        // On affiche un message de remerciement au visiteur.
     
        echo '<script language="JavaScript" type="text/javascript">';
        echo 'alert("Merci pour votre message !");';
        echo '</script>';
     
        }
          // sinon on affiche un message d’erreur et on redirige.
          else
        {
        echo '<script language="Javascript" type="text/javascript">';
        echo 'alert("Remplissez chaque champ svp !");';
        echo 'javascript:history.back(1);';
        echo '</script>';
        }
    }
     
    ?>
    de mon code ?


    sont casse couille ces spammeurs...

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    <h1 align="center">C'&eacute;tait un Rendez-Vous</h1><h3 align="center"> - Commentaires du court m&eacute;trage r&eacute;alis&eacute; par Claude Lelouch -</h3>
     
    <div id="menu_5">
     
    <?php include('inc/menu.php'); ?>
     
    <div class="spacer"></div>
    </div>
     
    <br />
     
    <?php
     
    // Inclusion du fichier infos_sql.php
     
    include 'infos_sql.php';  
     
    // Test du champ caché posted.
     
    if(isset($_POST['posted']))
    {
     
       // Si tous les champs sont remplis.
     
        if(!empty($_POST['pseudo']) AND !empty($_POST['email']) AND !empty($_POST['message']))
        {
     
        // On nettoie les données (sauts de ligne en trop…).
     
        $pseudo = trim(ucfirst(addslashes($_POST['pseudo'])));
        $email = trim(addslashes($_POST['email']));
        $message = trim(ucfirst(addslashes($_POST['message'])));
     
        // On définit la requête d’insertion.
     
        $insert = "INSERT INTO guestbook VALUES('','$pseudo','$email','$message','$date')";
     
        // On exécute l’insertion des données dans la table.
     
        $query = mysql_query($insert) OR die("Impossible d’ajouter le message<br />". mysql_error());
     
        // On affiche un message de remerciement au visiteur.
     
        echo '<script language="JavaScript" type="text/javascript">';
        echo 'alert("Merci pour votre message !");';
        echo '</script>';
     
        }
          // sinon on affiche un message d’erreur et on redirige.
          else
        {
        echo '<script language="Javascript" type="text/javascript">';
        echo 'alert("Remplissez chaque champ svp !");';
        echo 'javascript:history.back(1);';
        echo '</script>';
        }
    }
     
    ?>
    <body>
    <div align="center"><h2>[ Commentaires actuellement suspendus, le temps de trouver un antispam éfficace. ]</h2></div>
    <?php
     
    // On vérifie à quel endroit dans la table on récupère les messages.
     
    if(!$_GET['start']) {$_GET['start']=0;}
     
    // On effectue une requête de recherche et de sélection des messages.
    $rec = mysql_query("SELECT pseudo, email, message, date FROM guestbook ORDER BY id DESC LIMIT ".$_GET['start'].",".$nb) OR die("Erreur : ".mysql_error());
     
    // On extrait les données une à une à l’aide d’une boucle While() ;
     
    while ($row = mysql_fetch_assoc($rec)) 
    {
     
    ?>
    <div align="center"> 
    <center> 
    <table border="0" cellpadding="4" cellspacing="0" width="60%"> 
    <tr> 
    <td width="100%" style="border: 1 solid #000000">&nbsp;De: <b><a href="mailto:<?php echo stripslashes($row['email']); ?>"><?php echo stripslashes($row['pseudo']); ?></a></b> le <u><?php echo $row['date']; ?></u></td> 
    </tr> 
    <tr> 
    <td width="100%" style="border: 1 solid #000000"><?php echo nl2br(stripslashes($row['message'])); ?></td> 
    </tr> 
    </table> 
    </center> 
    </div> 
    <br /><br /> 
    <?php 
    } 
     
    // On libère la mémoire cache après la requête. 
     
    mysql_free_result($rec); 
     
    // On compte le nombre d’enregistrements. 
     
    $result=mysql_query("SELECT COUNT(*) FROM guestbook") OR die("Comptage Impossible"); 
    $row = mysql_fetch_row($result); 
    ?> 
    <p align="left"></p> 
    <p align="center"> 
    <?php 
     
    // On utilise un script pour un affichage du nombre de pages : 
     
    if ($_GET['start'] == 0) { 
    echo '<strong><font size="1" face="Verdana">[1]</font></strong>'; 
    } else { 
    echo '<a href="comments.php?start=0">[1]</a>&nbsp;'; 
    } 
    for($index=1;($index*$nb)<$row[0];$index++) { 
    $pg = $index+1; 
    if(($index*$nb)!=$start) { 
    print('<a href="comments.php?start='.($index*$nb).'">'); 
    echo '['.$pg.']'; 
    print("</a>"); 
    } 
    else { 
    echo ' <strong><font size="1" face="Verdana">['.$pg.']</font></strong>'; 
    } }
     
    // Fermeture de la connection SQL
     
    mysql_close();
     
    include('inc/foot.php');
    ?>
    & euh, en passant vous n'auriez pas un bon script/tuto pour mettre en place un antispamm sur ce genre de formulaire ?

    Cordialement

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Désactive tout ce qui se trouve dans le if(isset($_POST['posted']))

  6. #6
    Him
    Him est déconnecté
    Membre régulier Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Points : 112
    Points
    112
    Par défaut
    Ok, merci

    & euh, en passant vous n'auriez pas un bon script/tuto pour mettre en place un antispamm sur ce genre de formulaire ?

    Cordialement

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Ah mince ce n'était pas à la ligne 25....

    Pour ce qui est d'un anti spam, tu peux vérifier en utilisant l'ip. En fait dans ta base tu enregistre l'ip + la date de post. Et avant de faire l'insert dans la base tu fais une requete sur la base qui demande les post avec l'ip toto ayant poster depuis moins de deux minutes par exemple.
    Si tu en trouves un c'est que la personne fais du posting intensive.

    Attention tout de même dans ce que je veins dire il y à un petit souci. En effet il peut arriver qu'une personne légitime utilise le formulaire deux fois en deux minutes. Pour X raisons, donc il faudrait augmenter le nombre de message postable en 2 minute. Pour passer de 1 à 3 par exemple.
    Faire un compromis en somme.

    Enfin l'ip n'est pas une solution ultime... en effet si le type passe par des proxys il peut arriverr sans trop de souci à tout de même spamer.
    Cependant la je ne voit pas trop quelle information utiliser pour améliorer le process.

    bbye

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    S'il s'agit d'un formulaire de type message de forum, il faut limiter à l'aide de la session. S'il s'agit d'un formulaire de login, il faut limiter le nombre de tentatives ratées par heure et par IP. Si c'est pour un envoi de mail ou un enregistrement en ligne, tu peux utiliser un kaptcha.
    etc.

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

Discussions similaires

  1. [ZF 1.11] Formulaire avec fichier - 2 files alors que déclaré 1
    Par Paul75 dans le forum Zend_Form
    Réponses: 4
    Dernier message: 23/06/2011, 10h19
  2. Réponses: 4
    Dernier message: 20/09/2006, 16h58
  3. Réponses: 9
    Dernier message: 30/08/2006, 00h42
  4. Réponses: 4
    Dernier message: 13/08/2005, 10h20
  5. RecordCount = -1 alors que SELECT = OK
    Par Dionyzos dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/03/2005, 14h27

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