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 :

[Sécurité] Dispositif anti-spam en PHP ?


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut [Sécurité] Dispositif anti-spam en PHP ?
    Bonjour.

    J'utilise un script php/mysql pour un livre d'or. Il fonctionne très bien, si ce n'est que je suis horripilé par les spams ! Comme je suppose que les malfaisants ne s'amusent pas à remplir à chaque fois les champs des messages (que j'efface au fur et à mesure), il doivent utiliser un "logiciel" (dont j'ignore le nom et comment il fonctionne) pour poster leur saloperie à intervalles réguliers, un peu comme les spameurs de forums phpbb.
    Sur ces forums, il existe un dispositif qui consiste à recopier obligatoirement des caractères pas très lisibles sur une image aléatoire avant de s'inscrire. Y a-t-il un moyen d'adapter ça sur un livre d'or, ou sinon, que me proposez-vous d'autre ?

    Merci.

  2. #2
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Tu trouveras des infos sur le CAPTCHA

  3. #3
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    ou sinon tu poses une question/devinette avant l'insertion sur ton livre d'or

    du genre: couleur du poisson rouge?

    et tu compares avec ta réponse

    si ok alors inertion si not ok alors pas d'insertion

  4. #4
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Pour avoir eu exactement le même problème, ce que j'ai fait, c'est générer un ptit mot de passe à chaque affichage de page, que je passe en input hidden.
    J'ai également un champ "validation" ou le gars qui veut laisser un message doit recopier le mot de passe.

    Au moment de l'insertion dans le livre, je compare l'input hidden et le champ "validation", et si c'est pas les même, j'affiche un ptit message "le spam c'est mal !".

    C'est pas bien compliqué, et depuis, je n'ai plus de message de spam ^_^

    --
    Rakken

  5. #5
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    Je rejoins l'idee de mussara

    tu poses un calcule simple, du style

    combien font deux plus un ?

    ca t'evite de te casser la tete avec la generation d'image.

  6. #6
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Rakken
    Ca a l'air bien ton truc ! Tu pourrais mettre la portion de code ?
    Mais j'espère que c'est pas du JavaScript, parce qu'il suffit de désactiver l'option pour passer outre. J'ai déjà ce problème en obligeant les signataires à remplir au moins les champs "pseudo" et "message" et je me retrouve de temps en temps avec des commentaires vides...

  7. #7
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Allez, j'suis de bonne humeur aujourd'hui ;-))

    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
     
    <?
    function randomkeys($length)
    {
      $pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
      for($i=0;$i<$length;$i++)
      {
       if(isset($key))
         $key .= $pattern{rand(0,35)};
       else
         $key = $pattern{rand(0,35)};
      }
      return $key;
    }
     
    // (...) récupération de tes infos pour le livre d'or
     
    if (isset($_POST['spam_field'])) $spam_field = $_POST['spam_field']; else $spam_field = '';
    if (isset($_POST['spam_field_protect'])) $spam_field_protect = $_POST['spam_field_protect']; else $spam_field_protect = '';
     
    if ($spam_field == $spam_field_protect) {
     
        // (...) Enregistrement de ton message dans le livre d'or.
     
    } else {
        $anti_spam_text = "Les spammeurs sont des crétins finis.<br>";
    }
     
    $anti_spam = randomkeys(5);
     
    ?>
     
     
     
    Pour postez entrez "<? echo $anti_spam ?>" dans le champ de protection anti-spam.
    <form name="livre" method="post" action="livre.php">
    <input type="hidden" name="spam_field_protect" value="<? echo $anti_spam ?>">
     
    <? /* (...) Affichage du formulaire pour le livre d'or */ ?>
    Protection anti-spam : <input name="spam_field" type="text" size="20" maxlength="30">
    <input name="submit" type="submit" value="envoyer">
    </form>
     
    <? /* (...) Affichage du livre d'or */ ?>
    T'as plus qu'a integrer ce code là a ton propre livre d'or.
    C'est un peu plus chiant a passer pour un robot automatique de spam qu'un champ supplémentaire qui doit avoir une valeur précise mais si quelqu'un veut vraiment te spammer toi, c'est pas ce code là qui va le retenir très longtemps. Si les spams continuent, ll faudra remplacer par des images générée comme le suggerait guitou, mais bon, faudrait vraiment que le spammeur t'en veuille.

    Voila, amuse toi bien ;-)
    --
    Rakken

    ps : J'ai taillé dans mon code pour ne te donner que les parties interessantes pour toi, je n'ai pas tester plus que ca, tu devras peut-être adapter un peu ^^

  8. #8
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Je te remercie, mais je dois avoir merdé quelque part car ça ne fonctionne pas (bien que je n'ai aucun message d'erreur).

    Voici ma page complète (épurée des tableaux) ; pendant que je bidouille, si tu as le temps d'y jeter un oeil et de trouver l'erreur. Ca doit venir du onSubmitdu formulaire, mais je ne sais pas comment faire.

    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
    <script>
    function test_form(expediteurID, messageID)
    {
    	if(expediteurID.value=="")
    		{
    			alert('Vous devez saisir votre nom !')
           		expediteurID.focus();return false
    		}
    	if(messageID.value=="")
       		{
    			alert('Vous devez saisir un message !')
           		messageID.focus();return false 
    		}
    	return true
    }
    </script>
     
    					<td height="30" width="680" colspan="3">
    						<?
    						include ("connexion.php");
    						if($test=="ok")
    						{
    						$Date  = date("Y/m/d h:i:s");
    						$query = "INSERT INTO phpbb_livre(codelivre, message, expediteur, email, site, age, ville, date)";
    						$query .= "VALUES('', '$messageID', '$expediteurID', '$emailID', '$siteID', '$ageID', '$villeID', '$Date')"; 
    						$result = mysql_query($query);
    						?>
    					Votre message a &eacute;t&eacute; enregistr&eacute;
     
    					<a href="page_livre.php"><b>Lire les messages</a>
     
    						<? 
     						}
    						if ($test!="ok")
    						{
    						?>
    						<div align="center" class="text_title">Signer le livre d'or</div></td>
     
    					<td height="30" width="680" colspan="3"><img src="images/line_03.png" width="680" height="15"></td>
     
    						<?
    						function randomkeys($length)
    						{
     						$pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
      						for($i=0;$i<$length;$i++)
      						{
       						if(isset($key))
         						$key .= $pattern{rand(0,35)};
       						else
         						$key = $pattern{rand(0,35)};
      						}
      						return $key;
    						}
     
    						// Récupération des infos pour le livre d'or
    						if (isset($_POST['spam_field'])) $spam_field = $_POST['spam_field']; else $spam_field = '';
    						if (isset($_POST['spam_field_protect'])) $spam_field_protect = $_POST['spam_field_protect']; else $spam_field_protect = '';
     
    						if ($spam_field == $spam_field_protect) {
     
    						// Enregistrement du message dans le livre d'or
    						} else {
        						$anti_spam_text = "Pas de SPAM ici !<br>";
    						}
     
    						$anti_spam = randomkeys(5);
    						?>
     
    						Pour valider votre commentaire, saisissez <b><? echo $anti_spam ?></b> dans le champ "Anti-Spam".
     
    						<form name="livre" method="post" onSubmit="return test_form(this.expediteurID, this.messageID)" action="page_livre_form.php?test=ok">
     
    									<input type="hidden" name="spam_field_protect" value="<? echo $anti_spam ?>">
     
    									<input type="text" name="expediteurID" size="47" maxlength="50">
    									<input type="text" name="emailID" size="47" maxlength="50">
    									<input type="text" name="siteID" size="47" maxlength="50">
    									<input name="ageID" type="text" size="2" maxlength="2">
    									<input type="text" name="villeID" size="47" maxlength="50">
    									<textarea name="messageID" cols="35" rows="7"></textarea>
     
    									<? /* (...) Affichage du formulaire pour le livre d'or */ ?>
    									Anti-Spam : <input name="spam_field" type="text" size="20" maxlength="30">
    									<input type="submit" name="submit" value="Envoyer"></div></td>
    						</form>
    						<? /* (...) Affichage du livre d'or */ ?>
    <?
    }
    mysql_close();
    ?>
    </body>
    </html>
    Quelle est l'utilité de ces deux portions ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <? /* (...) Affichage du formulaire pour le livre d'or */ ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <? /* (...) Affichage du livre d'or */ ?>

  9. #9
    Débutant
    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations forums :
    Inscription : Avril 2003
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Salut

    1- Avant la ligne 21 il faut récupérer la valeur test transmis par GET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Initialise $test a "" si le formulaire n'est pas encore envoyé
    $test = (isset($_GET['test'])?$_GET['test']:"";
    2- Proposiitions d'explication:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Affiche le formulaire d'ajout comme son nom l'indique
    <? /* (...) Affichage du formulaire pour le livre d'or */ ?>
    /* Affiche les messages du livre d'or avec le dernier ajouté bien evidemment et donc tu auras et le formulaire et les messages sur la même page */
    <? /* (...) Affichage du livre d'or */ ?>
    J'espere t'avoir été utile

  10. #10
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Fovi72 a tout dis, j'crois bien que je n'ai rien a rajouter ^_^

    --
    Rakken

  11. #11
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Merci pour ces précisions ! Malheureusement, je ne peux pas voir si ça fonctionne ; hébergé chez Free, ce matin, je n'arrive pas à me connecter au FTP.

    Néanmoins, je reste perplexe quant aux deux lignes. Je m'explique...

    Mon livre d'or est en deux parties :

    - page_livre.php : où figurent les messages.
    - page_livre_form.php : le formulaire de saisie.

    A partir du site, quand on clique sur le lien du livre, on arrive sur page_livre.php. Un clic sur Signer le livre d'or et on est redirigé vers le formulaire.
    Après avoir saisi le message et validé, la redirection s'effectue sur une page "épurée" qui indique que le message a été enregistré. Un clic sur Lire les messages et on se retrouve sur le livre proprement dit, où l'on peut lire le message que l'on vient d'écrire.
    Voilà pourquoi je doute de l'utilité de ces deux lignes...
    Je précise que ce n'est pas moi qui ai conçu ce livre (je ne suis pas assez calé pour ça !), je me suis contenté de le récupérer, de l'enrichir et de l'adapter.

    Autre problème : le code JavaScript inopérant si le visiteur n'a pas activé l'option dans son navigateur. Je me retrouve avec pas mal de messages vides. Ce qui fait que j'aimerais bien supprimer le code correspondant, mais ça déconne dans l'enregistrement des messages : sans ce code, ils sont enregistrés deux fois !
    Donc, si il y a moyen d'insérer un code en PHP tel l'anti-spam, je suis preneur. Dans l'idéal, pour qu'un message soit enregistré, il faut qu'il y ait au moins un nom de saisi, un message et la recopie exacte des caractères aléatoires générés. Pas facile pour moi...

    Je mettrai un lien direct dès que le serveur répondra pour que vous y voyiez plus clair.

    Merci encore...

  12. #12
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Dans mon livre d'or, j'avais mon formulaire pour enregistrer les messages sur la même page que l'affichage des des messages. (Bref, un seul fichier pour mon livre d'or).
    Les deux lignes de commentaire correspondent à l'endroit ou initialement j'avais mon code pour afficher le formulaire de saisie et l'affichage de mes messages.
    Ces lignes n'étaient là qu'a titre informatif, et dans la mesure ou c'est des commentaires, elle n'ont évidement aucune influence sur le code en lui même, bref, tu peux allègrement les supprimer.

    Maintenant, si tu veux être sur qu'il y ait un message, tu peux modifier la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($spam_field == $spam_field_protect)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($spam_field == $spam_field_protect && !empty($messageID) && !empty($expediteurID))
    Et voila ;-)
    --
    Rakken

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Pour faire beaucoup plus simple.....

    Etant donné que les robots sont programmés pour attaquer un type de livre d'or bien précis, si tu renomme la pages qui permet de saisir un message (genre new_message.php en new_message_secure.php) et que tu change les références à cette page dans tout les autres scripts, les robots auront des erreurs 404 et les "programmeurs" ne risque pas de changer leur robots pour 1 seul site.

    C'est ce que nous avions fait sur le phpBB developpez.com à l'époque et ça avait reglé le problème.

  14. #14
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Eh bien ça ne fonctionne pas ! Qu'on laisse les champs vides ou non, les messages s'enregistrent... et deux fois !
    Peut-être Rakken pourrais-tu me proposer le code de ton livre, en une seule page ? En attendant, voici les miens :

    page_livre.php

    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
    <html>
    <head>
    <title>Livre d'or</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Pragma" content="no-cache">
    </head>
     
    <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
    <table width="680" align="center" border="0" cellspacing="0" cellpadding="0" bgcolor="#F7F2E1">
    	<tr>
    		<td height="60" colspan="3"><div align="center"><b>LIVRE D'OR</b></div></td>
    	</tr>
    	<tr>
    		<td height="30" colspan="3">
    			<? 
    			include("connexion.php");
     			$sql = mysql_query("select count(*) from livre");
     			$total = @mysql_fetch_array($sql);
    			$resder = $total[0];
    			$sql = mysql_query("select * from livre order by date desc");
    			?>
    		<div align="center"><b><a href="page_livre_form.php">Signer le livre d'or</a></b></div></td>
    	</tr>	
    	<tr>	
    		<td height="15" colspan="3"><hr></td>
    	</tr>
    	<tr>
    		<td height="30" colspan="3"><div align="center">Messages : <b><? echo $resder; ?></b>
    			<?
    			while($valeurlud = @mysql_fetch_array($sql))
    			{
    			$date=date("d/m/Y à H:i:s", strtotime($valeurlud["date"]));
    			?>
    		</div></td>
    	</tr>	
    	<tr>		
    		<td height="15" colspan="3"><hr></td>
    	</tr>	
    	<tr>	
    		<td width="15"></td>
    		<td width="650"><div align="center">
    			<b><? echo $valeurlud["expediteur"]; ?></b> <? echo '<a href="mailto:' . $valeurlud["email"] . '">' . $valeurlud["email"] . '</a>'; ?> <? echo '<a href="' . $valeurlud["site"] . '">' . $valeurlud["site"] . '</a>'; ?>																																									
    			<br>
    			<? echo $valeurlud["age"]; ?> ans, de <? echo $valeurlud["ville"]; ?>
    			<br>
    			[ a &eacute;crit le <? echo $date; ?> ]
    			<br>
    			<? echo $valeurlud["message"]; ?>
    		</div></td>
    		<?
    		}
    		?>
     
    		<?
    		mysql_close();
    		?>
    		<td width="15"></td>
    	</tr>	
    	<tr>		
    		<td height="30" colspan="3"><hr></td>
    	</tr>
    </table>
    </body>
    </html>
    page_livre_form.php

    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
    <html>
    <head>
    <title>Livre d'or</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Pragma" content="no-cache">
    </head>
     
    <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
    <table width="680" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#F7F2E1">
    	<tr>
    		<td height="60">
    			<?
    			include ("connexion.php");
    			{
    			$Date  = date("Y/m/d h:i:s");
    			$query = "INSERT INTO livre(codelivre, message, expediteur, email, site, age, ville, date)";
    			$query .= "VALUES('', '$messageID', '$expediteurID', '$emailID', '$siteID', '$ageID', '$villeID', '$Date')"; 
    			$result = mysql_query($query);
    			?>
    			<div align="center"><b>LIVRE D'OR</b></div></td>
    	</tr>
    	<tr>
    		<td height="30"><div align="center"><b>Votre message a &eacute;t&eacute; enregistr&eacute;</b></div></td>
    	</tr>
    	<tr>
    		<td height="30"><div align="center"><a href="page_livre.php"><b>Lire les messages</b></a></div></td>
    	</tr>
    	<tr>
    		<td height="30">
    		<div align="center">Signer le livre d'or</div></td>
    	</tr>
    	<tr>
    		<td height="30"><hr></td>
    	</tr>
    		<?
    		function randomkeys($length)
    		{
     		$pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
     		for($i=0;$i<$length;$i++)
      			{
    			if(isset($key))
         			$key .= $pattern{rand(0,35)};
       			else
         			$key = $pattern{rand(0,35)};
      			}
      		return $key;
    		}
     
    		if (isset($_POST['spam_field'])) $spam_field = $_POST['spam_field']; else $spam_field = '';
    		if (isset($_POST['spam_field_protect'])) $spam_field_protect = $_POST['spam_field_protect']; else $spam_field_protect = '';
    		if ($spam_field == $spam_field_protect && !empty($messageID) && !empty($expediteurID))
    		{
    		}
    		else
    		{
     		$anti_spam_text = "Pas de SPAM ici !";
    		}
    		$anti_spam = randomkeys(5);
    		?>
    	<tr>
    		<td height="30"><div align="center">Avant de valider votre message, saisissez <b><? echo $anti_spam ?></b> dans le champ "Anti-Spam".</div></td>
    	</tr>
    	<tr>
    		<td height="30">
    			<form name="livre" method="post" action="page_livre_form.php">
    				<table width="650" border="0" align="center" cellpadding="0" cellspacing="0">
    					<input type="hidden" name="spam_field_protect" value="<? echo $anti_spam ?>">
    					<tr>
    						<td height="15" colspan="2"></td>
    					</tr>
    					<tr>		
    						<td width="180" height="35" valign="top">Votre nom</td>
    						<td width="470" height="35" valign="top"><input type="text" name="expediteurID" size="47" maxlength="50"></td>
    					</tr>
    					<tr>	
    						<td width="180" height="35" valign="top">Votre adresse email</td>
    						<td width="470" height="35" valign="top"><input type="text" name="emailID" size="47" maxlength="50"></td>
    					</tr>
    					<tr>	
    						<td width="180" height="35" valign="top">Votre site</td>
    						<td width="470" height="35" valign="top"><input type="text" name="siteID" size="47" maxlength="50"></td>
    					</tr>
    					<tr>	
    						<td width="180" height="35" valign="top">Votre &acirc;ge</td>
    						<td width="470" height="35" valign="top"><input type="text" name="ageID" size="2" maxlength="2"></td>
    					</tr>
    					<tr>	
    						<td width="180" height="35" valign="top">Votre ville</td>
    						<td width="470" height="35" valign="top"><input type="text" name="villeID" size="47" maxlength="50"></td>
    					</tr>
    					<tr>	
    						<td width="180" height="150" valign="top">Votre message</td>
    						<td width="470" height="150" valign="top"><textarea name="messageID" cols="35" rows="7"></textarea></td>
    					</tr>
    					<tr>	
    						<td width="180" height="35" valign="top">Anti-Spam</td>
    						<td width="470" height="35" valign="top"><input name="spam_field" type="text" size="47" maxlength="30"></td>
    					</tr>
    					<tr>	
    						<td height="30" colspan="2"><div align="center"><input type="submit" name="submit" value="Signer"></div></td>
    					</tr>
    				</table>
    			</form>
    		</td>
    	</tr>
    </table>	
    <?
    }
    mysql_close();
    ?>
    </body>
    </html>

  15. #15
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    pourquoi ne recherches tu pas la facilité, comme te l'ont dit plusieurs personnes sur ce post?
    et la dernière solution de Gaël Donat te résoud tout tes pbs en un seul coup et tu n'as même pas besoin de changer quoi que ce soit dans tes pages (sauf les noms de fichiers modifiés bien entendu).

    ou alors j'en reviens à mon test sur une question avec réponse demandée qui t'aiguille soit vers l'envoi du post soit vers un message comme quoi interdit aux spammeurs

  16. #16
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Mussara
    Je n'ai aucune idée des moyens employés par les spammers pour envoyer leur merde. Mais je gage que si je renomme mes pages, il ne se passera pas bien longtemps avant qu'elles ne soient spammées à nouveau, non ?

  17. #17
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    a ton avis comment fait un robot pour spammer un livre d'or ou un forum?

    il ne va pas aller spammer le forum qui aura été écrit à la mimine, il spamme les forums qui ont pignon sur rue au niveau développements: PHPBB et autres

    et comme le code est connu de tous (puisqu'on est dans le domaine du GNU), il est "facile" d'écrire une procédure qui va aller mettre des messages intempestifs...
    ne crois pas qu'il y a quelqu'un qui physiquement va aller sur ton livre d'or, trouver ta page pour écrire un message, cliquer à tel et tel endroit pour envoyer le message. c'est une proécdure automatique qui s'affranchit de tout cela, le spammer ne va pa aller sur ta page "en vrai"...

    du coup ce que t'as proposé Gaël Donat est une excellente solution, car le spam envoyé n'aboutira nulle part vu que tu auras renommé tes pages... du coup le robot sera perdu...

  18. #18
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Ca, je me doute bien que ce n'est pas un type qui passe son temps à naviguer entre les sites et qui poste ses messages à la main. Mais étant novice, je n'ai aucune idée de la technique employée pour automatiser la procédure : est-ce un logiciel, un code maison ? Bref, je vais renommer mes pages et on verra bien...

    Mais il y a quand même un autre problème qui n'a rien à voir avec le spam : le code JavaScript caduque si l'on désactive l'option dans le navigateur et qui n'empêche pas l'enregistrement de messages vides. Où puis-je en trouver un en PHP ? Parce que sur ce forum, j'ai déjà posé la question, je n'ai jamais eu de réponse...

  19. #19
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    en php
    si la réponse est égale à "" (rien) alors le message n'est pas mis en ligne

  20. #20
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Bon, j'ai renommé les pages du livre d'or et ça fait trois jours que je n'ai plus le moindre SPAM.
    Par contre, pour le code PHP qui interdit l'enregistrement des messages vides, je ne sais pas comment faire...

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/06/2007, 16h50
  2. Anti spam
    Par wodel dans le forum Réseau
    Réponses: 1
    Dernier message: 27/11/2005, 12h43
  3. [Sécurité] Anti spam
    Par mic79 dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2005, 14h49
  4. Anti Spam sous RedHat
    Par TuxP dans le forum Réseau
    Réponses: 3
    Dernier message: 03/02/2004, 11h26

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