Page 1 sur 2

Empecher les meesages intempestifs sur mon livre d'Or

Posté : 10 nov. 2007, 20:21
par Photographiquement Vôtre
Bonsoir,

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

Comment les bloquer.

Merci d'avance

Posté : 10 nov. 2007, 20:27
par Ultim4T0m
Regarde du côté du CAPTCHA, c'est ce qu'il y aurait sans doute de plus adapté.

Posté : 10 nov. 2007, 21:17
par Photographiquement Vôtre
Merci mais il n'y a rien de plus simple ?

Posté : 10 nov. 2007, 21:47
par Power Web
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 !

Posté : 11 nov. 2007, 19:13
par Photographiquement Vôtre
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

Posté : 11 nov. 2007, 19:26
par Cyrano
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.

Posté : 11 nov. 2007, 20:08
par Power Web
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>';
	} 
}	
?>

Posté : 11 nov. 2007, 20:42
par Berzemus
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.

Posté : 11 nov. 2007, 20:56
par Power Web
Avec un lien javascript back les champs sont toujours remplis :wink:

Code : Tout sélectionner

<a href="javascript:history.back(-1)">Retour</a>

Posté : 11 nov. 2007, 21:37
par Photographiquement Vôtre
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 ?

Posté : 11 nov. 2007, 23:06
par Cyrano
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 ? ;)

Posté : 12 nov. 2007, 00:31
par Photographiquement Vôtre
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

Posté : 12 nov. 2007, 00:31
par Photographiquement Vôtre
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

Posté : 12 nov. 2007, 01:20
par iclo
Oui, le robot ne vas pas s'amuser à executer du code Js, donc une protection faisant appel à du Js semble tout à fait inutile.

Posté : 12 nov. 2007, 01:25
par hakazizi
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...