Empecher les meesages intempestifs sur mon livre d'Or

Eléphant du PHP | 330 Messages

10 nov. 2007, 20:21

Bonsoir,

J'ai mis en place un livre d'or mais je reçois plein de messages intempestifs

Comment les bloquer.

Merci d'avance
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Eléphant du PHP | 445 Messages

10 nov. 2007, 20:27

Regarde du côté du CAPTCHA, c'est ce qu'il y aurait sans doute de plus adapté.
LLDC
Ulti

Eléphant du PHP | 330 Messages

10 nov. 2007, 21:17

Merci mais il n'y a rien de plus simple ?
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Eléphant du PHP | 61 Messages

10 nov. 2007, 21:47

Si, tu met une question de ce style :
Combien font 2 + 2 ?

Et avant d'enregistrer le message tu fais une condition PHP qui accepte 4 et quatres ;) Moi j'utilise ça et ça marche très bien !
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.

Eléphant du PHP | 330 Messages

11 nov. 2007, 19:13

J'ai essayé mes les messages passent toujours :

Mon formulaire :
?>	
<!---- Formulaire de Saisie du message -->	
<p><a name="ancre_formu"></a>&nbsp;</p>
	<form id="form_tuto" action="valid.php" method="post" > 
  	 
	<legend>Incrivez votre message</legend> 
	
	
	<table cellpadding="3" width="60%" align="center">
  		<fieldset> 
    	
    	
     	
      	<tr>
       		<td colspan="3">Nom <input type="text" name="nom" id="nom" value="" size="30" maxlength="30"></td>
       		<td colspan="3">Prénom <input type="text" name="prenom" id="prenom" value="" size="15" maxlength="30"></td>
       		<td colspan="3">Pays <select name="pays">
       		<option value="France" selected>France
       		<option value="Italie">Italie
       		<option value="Belgique" >Belgique
       		<option value="Suisse">Suisse
       		<option value="Espagne">Espagne
       		<option value="Luxembourg">Luxembourg
       		<option value="Canada">Canada
       		<option value="EtatsUnis">Etats Unis
       		<option value="Japon">Japon
       		<option value="Autre">Autre
       		</select>
       		</td>
      	</tr>
      	<tr>
       		<td colspan="3">Email&nbsp;&nbsp;<input type="text" name="email" id="email" value="" size="55" maxlength="50"></td>
       		<tdcolspan="3"Site&nbsp;&nbsp;<input type="text" name="url" value="http://" size="40" maxlength="30"></td>
       		
      	</tr>
      	<tr>
       		<td colspan="12"><br><textarea name="message" id="message" rows="10" cols="55"></textarea></td>
       		
       	</tr>
       		
		
		<tr>
			<td>Combien font 2 + 3 (Question anti-spam)</td>
			<td><input type="text" name="code"/></td>
		</tr>	

				      	
       	<tr>		
       		<td><input type="submit" name="envoi" id="envoi" value="Valider" /></td>
       		<td><input type="reset" name="annuler" id="annuler" value="Recommencer" /></td>
      	</tr>
     </table>
  
  </fieldset> 
</form>
Ma page de validation valid.php

?>

<h1 align="center" class=titre >Message pour le livre d'or</h1>

<?php

$table="tbllivredor";
$tableprepa="tbllivrePrepa";
$page = $_SERVER ["PHP_SELF"];
$adminemail="[email protected]";

	
if(isset($_POST['envoi'])) 
	{//1
	/* Le bouton d'envoi a été cliqué : On récupère la valeur envoyée du formulaire */ 
	if (isset($_POST["nom"])) $nom=htmlspecialchars(stripslashes($_POST["nom"]), ENT_QUOTES);
	if (isset($_POST["prenom"])) $prenom=htmlspecialchars(stripslashes($_POST["prenom"]), ENT_QUOTES);
	if (isset($_POST["pays"])) $pays=htmlspecialchars(stripslashes($_POST["pays"]), ENT_QUOTES);
	if (isset($_POST["email"])) $email=htmlspecialchars(stripslashes($_POST["email"]), ENT_QUOTES);
	if (isset($_POST["message"])) $message=htmlspecialchars(stripslashes($_POST["message"]), ENT_QUOTES);   
	if (isset($_POST["code"])) $code=htmlspecialchars(stripslashes($_POST["code"]), ENT_QUOTES);   
	
	if($nom == '')
		{
		echo "<h3 align=center><strong>Vous devez remplir le nom</h3>";
   		
   		}	
   			
	if($prenom == '')
		{
		echo "<h3 align=center><strong>Vous devez remplir le prénom</h3>";
   		
   		}
   	if($email == '')
		{
		echo "<h3 align=center><strong>Vous devez remplir l'email</h3>";
   		
   		}	
   		
   	if($message == '')
		{
		echo "<h3 align=center><strong>Vous devez remplir le message</h3>";
   		
   		}		
   		
   	if($code == '')
		{
		echo "<h3 align=center><strong>Vous devez remplir le code</h3>";
   		
   		}		
   		
   	
   		
   	if ($code ==5)
		{
?>

		<h3 align="center"><strong>Merci d'avoir laissé un message</strong></h3> 
		
<?php		
		
		$date = date("d/m/y"); 
		$query = "INSERT INTO $tableprepa(livredorDate,livredorNom,livredorPrenom,livredorPays,livredorEmail,livredorCommentaire)"; 
		$query .= " VALUES('$date','$nom','$prenom','$pays','$email','$message')"; 

		$result = mysql_query($query)or exit ('Erreur SQL !'.$result.'<br>'.mysql_error()); 
		
		$sujet    = "Message sur votre Livre d'Or"; 
   		$corps  = "Nom: ".$nom."\r\n"; 
   		$corps .= "Prénom: ".$prenom."\r\n"; 
   		$corps .= "Date: ".$date."\r\n"; 
   		$corps .= "Message: ".$message."\r\n"; 
   		$entete = "From: ".$email."\r\n"; 
    		
   		mail($adminemail,$sujet,$corps, $entete); 
		
		
		
		
		}
	else
		{
			
		echo "<h3 align=center><strong>L'addition n'est pas bonne</h3>";
		}			
		
	}
	
	
	 ?><p align=center><a href=livredor.php#ancre_formu>Retourner sur le livre d'or</a></p><? 
    	
	
	
	
?>
Ou ai je fait une erreur.

Merci d'avance pour votre aide
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Mammouth du PHP | 19672 Messages

11 nov. 2007, 19:26

Autre méthode possible, je l'ai mise en place sur le LO de ma page perso et ça fonctionne particulièrement bien : là où tu as un textarea pour saisir le message à poster, utilise une ruse qu'aucun robot ne peut comprendre pour le moment : renomme ton textarea : name="spam" : ensuite, ajoute un autre textarea avec le nom original que tu as remplacé par spam mais ajoute lui un id et dans une feuille de style externe, ajoute sur ce second textarea "display: none".

Dans le traitement, vérifie s'il y a un contenu dans le textarea qui a un nom "en apparence normal" : si c'est le cas, tu vire, l'internaute normal ne voit pas ce champ et ne peut rien y inscrire, donc c'est un robot qui l'a rempli, le contenu normal devant se trouver dans le textarea "spam" (Ca, l'internaute ne le sait pas, et le robot ne mettra à priori rien dedans, ce qui fait que le message normal serait en plus vide donc sujet à rejet lors de la validation).

De cette manière, pas besoin de captcha et je n'ai plus eu à supprimer de spam depuis le mois de juillet dernier.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 61 Messages

11 nov. 2007, 20:08

Tiens essais ça :
<h1 align="center" class="titre">Message pour le livre d'or</h1>
<?php
$table = "tbllivredor";
$tableprepa = "tbllivrePrepa";
$page = $_SERVER ["PHP_SELF"];
$adminemail = "[email protected]";

    
if(isset($_POST['envoi'])) 
{
	if ( isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["pays"]) && isset($_POST["email"]) && isset($_POST["message"]) && isset($_POST["code"])) 
	{ 
		$nom = htmlspecialchars(stripslashes($_POST["nom"]), ENT_QUOTES);
		$prenom  = htmlspecialchars(stripslashes($_POST["prenom"]), ENT_QUOTES);
		$pays = htmlspecialchars(stripslashes($_POST["pays"]), ENT_QUOTES);
		$email = htmlspecialchars(stripslashes($_POST["email"]), ENT_QUOTES);
		$message = htmlspecialchars(stripslashes($_POST["message"]), ENT_QUOTES);   
		$code = htmlspecialchars(stripslashes($_POST["code"]), ENT_QUOTES);   
    
		if(empty($nom)) { echo "<h3 align=center><strong>Vous devez remplir le nom</h3>"; }    
		if(empty($prenom)) { echo "<h3 align=center><strong>Vous devez remplir le prénom</h3>"; }
		if(empty($email)) { echo "<h3 align=center><strong>Vous devez remplir l'email</h3>"; }    
		if(empty($message)) { echo "<h3 align=center><strong>Vous devez remplir le message</h3>"; }        
		if(empty($code)) { echo "<h3 align=center><strong>Vous devez remplir le code</h3>"; }        
          
		else
		{
			if ($code == "5" || $code == "cinq")
			{
				echo "<h3 align=\"center\"><strong>Merci d'avoir laissé un message</strong></h3>";
		     
				$date = date("d/m/y"); 
				$query = "INSERT INTO $tableprepa VALUES('$date','$nom','$prenom','$pays','$email','$message')"; 
				$result = mysql_query($query)or exit ('Erreur SQL !'.$result.'<br />'.mysql_error()); 
        
				$sujet  = "Message sur votre Livre d'Or"; 
				$corps  = "Nom: ".$nom."\r\n"; 
				$corps .= "Prénom: ".$prenom."\r\n"; 
				$corps .= "Date: ".$date."\r\n"; 
				$corps .= "Message: ".$message."\r\n"; 
				$entete = "From: ".$email."\r\n"; 
            
				mail($adminemail,$sujet,$corps,$entete); 
			}
			
			else
			{
				echo "<h3 align=center><strong>L'addition n'est pas bonne</strong></h3>";
			}            
	    }
		
		echo '<p align="center"><a href="livredor.php#ancre_formu">Retourner sur le livre d\'or</a></p>';
	} 
}	
?>
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.

ViPHP
ViPHP | 4039 Messages

11 nov. 2007, 20:42

J'essayerais aussi une alerte javascript dans le cas d'une mauvaise réponse.

Rien de plus énervant que de devoir retourner en arrière et tout retaper.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 61 Messages

11 nov. 2007, 20:56

Avec un lien javascript back les champs sont toujours remplis :wink:

Code : Tout sélectionner

<a href="javascript:history.back(-1)">Retour</a>
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.

Eléphant du PHP | 330 Messages

11 nov. 2007, 21:37

Merci pour vos conseils.

Une chose que je ne comprends pas :

avec mes controles, moi quand je mets un chiffre erroné j'ai un message d'erreur.

Comment font les spameurs pour passer outre ?
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Mammouth du PHP | 19672 Messages

11 nov. 2007, 23:06

Ils reproduisent ton formulaire en local et envoient les données en $_POST, donc les protections JavaScript sont court-circuitées.

Personne n'a réagi, mais tu devrais regarder de plus près la suggestion que j'ai faire plus haut. Encore une fois, j'ai mis ça en place en juillet et je n'ai plus jamais eu de problème de spam, le seul que j,aie du supprimer avait été écrit manuellement sur un autre exemplaire de ce LO que j'avais installé sur un autre site.

Le JavaScript, c'est ok pour faire une pré-validation pour l'internaute normal, ensuite, c'est coté serveur que ça se passe et où ta validation aura un effet. Et en utilisant pas de captcha, tu laisse le LO accessible.

Enfin bon, tu fais comme tu veux hein ? ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 330 Messages

12 nov. 2007, 00:31

Cyrano,

J'avoue que le coté technique de reproduire le formulaire m'échappe un peu.

D'autre part dois je comprendre que les fonctions javascript ne servent à rien.

Et finalement pourquoi cela marche chez Power Web

Merci de ton aide
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Eléphant du PHP | 330 Messages

12 nov. 2007, 00:31

Cyrano,

J'avoue que le coté technique de reproduire le formulaire m'échappe un peu.

D'autre part dois je comprendre que les fonctions javascript ne servent à rien.

Et finalement pourquoi cela marche chez Power Web

Merci de ton aide
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

ViPHP
ViPHP | 2144 Messages

12 nov. 2007, 01:20

Oui, le robot ne vas pas s'amuser à executer du code Js, donc une protection faisant appel à du Js semble tout à fait inutile.

Mammouth du PHP | 558 Messages

12 nov. 2007, 01:25

Cyrano,

J'avoue que le coté technique de reproduire le formulaire m'échappe un peu.

D'autre part dois je comprendre que les fonctions javascript ne servent à rien.

Et finalement pourquoi cela marche chez Power Web

Merci de ton aide
les fonction javascript doivent-etre utilisé pour le confort de l'utilisateur il serait tres risqué de basé une protection sur du javascript.
un robot est lui meme un script dans le cas present.
il n'a donc pas de navigateur pour l'interpreté...
Si, tu met une question de ce style :
Combien font 2 + 2 ?

Et avant d'enregistrer le message tu fais une condition PHP qui accepte 4 et quatres ;) Moi j'utilise ça et ça marche très bien !
oui pas mal mais pour etre efficace il faut que cela soit aleatoire...