Lutter contre les Spam ...

  • Initiateur de la discussion Initiateur de la discussion gnark
  • Date de début Date de début

Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

gnark

New member
Inscrit
22 Mars 2008
Réponses
487
Bon deja qu'on se fait ch... a creer des sites autant se debarrasser au plus tot des emmerdeurs ne serait ce parfois que pour eviter les soucis juridiques...
... en cherchant un capcha pour un formulaire suis tombé sur cette petite totale... :D

Probleme le site semble plus accessible directement j'ai donc copié-collé du cache google
http://209.85.135.104/search?q=cach...ment-contre-le-spam/&hl=fr&ct=clnk&cd=1&gl=fr


Johnstyle, le Blog Web 2.0


Bonjour,

Bon nombre de webmasters cherchent toujours un moyen de contrer efficacement les spammeurs dans les formulaires (contact, commentaires, soumissions, etc.)

J’ai été confronté à ce problème récemment et j’ai donc mis au points quelques astuces qui jusqu’à présent marchent très bien :)


1 - Sécuriser l’accès de la page.

Le premier point est d’interdire l’accès extérieur de la page du formulaire. C’est très important car sans cela des robots peuvent accéder à votre formulaire et envoyer des spams par centaines !

Un petit morceau de code PHP qui vérifie le référent fera l’affaire :

PHP:
	// On récupère le Référent  
 
 $Referer = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : 'Aucun';  
 
// Formatage du référent  
 
 $Referer = preg_replace( "/http:\/\//","", $Referer );  
 
 $Referer = preg_replace( "/\/.*/", "", $Referer );  
 
// On vérifie le domaine  
 
 if( $Referer == 'www.johnstyle.fr' || $Referer == 'johnstyle.fr' )  
 
 {  
 
 	// Affichage du formulaire  
 
 }  
 
 // Sinon on Interdit l'accès  
 
 else  
 
 {  
 
 	echo 'Accès Interdit !';  
 
 }
Ensuite pour plus de sécurité on peut aussi interdire les PROXY :

PHP:
 // Fonction qui récupère les DNS  
 
 function GetDns( $IP )  
 
 {  
 
 	$Host 	= 	`host $IP`;  
 
 	$Host	=	end( explode( ' ', $Host ) );  
 
 	$Host	=	substr( $Host, 0, strlen( $Host ) - 2 );  
 
 	$Value	=	split( "\(", $Host );		if( $Value[1] )  
 
 	{  
 
 		return $IP." (".$Value[1].")";  
 
 	}  
 
 	else  
 
 	{  
 
 		return $Host;  
 
 	}  
 
 }  
 
// On récupère le Référent  
 
 $Referer 	= isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : 'Aucun';  
 
// On récupère l'Adresse IP  
 
 $AdresseIp 	= isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : 'Aucun';  
 
// On récupère l'Adresse IP  
 
 $Dns 		= GetDns( $AdresseIp );  
 
// Formatage du référent  
 
 $Referer 	= preg_replace( "/http:\/\//","", $Referer );  
 
 $Referer 	= preg_replace( "/\/.*/", "", $Referer );  
 
// On vérifie les Données  
 
 if(  
 
 	// On vérifie le Référent  
 
 	   ($Referer == 'www.johnstyle.fr'  
 
 	|| $Referer == 'johnstyle.fr')  
 
 	// On vérifie les DNS  
 
 	&& $Dns		!= 'NXDOMAIN'  
 
 	// On vérifie d'autres informations server  
 
 	&& empty( $_SERVER['HTTP_X_FORWARDED_FOR'] )  
 
 	&& empty( $_SERVER['HTTP_VIA'] ) )  
 
 {  
 
 	// Affichage du formulaire  
 
 }  
 
 // Sinon on Interdit l'accès  
 
 else  
 
 {  
 
 	echo 'Accès Interdit !';  
 
 }
Donc pour récapituler nous venons d’interdire l’accès à la page du formulaire aux requêtes extérieur et aux internautes se cachant derrière un Proxy.

Maintenant, on peut s’attaquer à la sécurité du formulaire.

2 - Sécuriser le formulaire

Rien de mieux qu’une image captcha où l’internaute dois tout simplement retaper un code affiché sur une image.
Il existe pas mal de script de captcha mais le meilleur d’après moi est celui-ci: Script Captcha
Il est simple, léger, paramétrable et en plus on peut rafraichir l’image sans recharger la page.
Désolé mais je ne me rappel plus de l’auteur, j’avais trouvé ce code il y a pas mal de temps déjà …

Une fois déziper il vous suffit d’envoyer le contenu à la racine de votre site.

Ensuite dans votre formulaire vous rajoutez ceci :

PHP:
<img src="image.php" alt="Code de vérification" id="captcha" />  
 
<a onclick="javascript:document.images.captcha.src='image.php?id='+Math.round(Math.random(0)*1000)+1" style="cursor: pointer">  
 
 <img src="refresh.gif" height="21" width="20" /> Rafraichir l'image  
 
</a>
Et cela dans la partie PHP lors du traitement des données :

PHP:
 // On démarre une session  
 
 // A Mettre dès la première ligne de votre fichier !  
 
 session_start();	// On récupère la variable du Captcha  
 
 $PostCaptcha = isset($_POST['captcha']) ? $_POST['captcha'] : '';;  
 
if( md5( $PostCaptcha ) != $_SESSION['valeur_image'] )  
 
 {  
 
 	// On affiche une erreur  
 
 	echo 'Le code de vérification est faux !<a href="javascript:history.back()">Retour</a>';  
 
// On arrête l'exécution du script  
 
 	exit;  
 
 }

Maintenant le formulaire est sécurisé, seulement malgré tout ce que l’on viens de faire les spammeur peuvent encore passer ! Donc nous allons vérifier les données.

3 - Traitement des Données

Cette partie est assez contraignante car il faudra rajouter au fur et à mesure qu’un spammeur réussi à ce glisser les mots clés et expression interdites. Mais je l’ai optimisé au maximum :)

Nous allons donc créer un tableau (ou une table SQL) contenant des expressions et mots clés jugés interdit.

PHP:
	$PostPseudo 		= isset( $_POST['pseudo'] ) 		? $_POST['pseudo'] 			: '';  
 
 $PostCommentaire 	= isset( $_POST['commentaire'] ) 	? $_POST['commentaire'] 	: '';  
 
$MotsInterdits = array(  
 
 						// Mots ou expression  
 
 						'viagra',  
 
 						'phentermine',  
 
 						'valium',  
 
 						// Mais aussi des morceaux de code  
 
 						'<\/?script ',  
 
 						'<a',  
 
 						'<img',  
 
 						'\[url',  
 
 						'\[img',  
 
 						'@',  
 
 						// etc.  
 
 							);  
 
function ScanDonnee($Post, $Interdit)  
 
 {  
 
 	$CountInterdit = count($Interdit);  
 
for( $i = 0; $i < $CountInterdit; $i++ )  
 
 	{  
 
 		if( preg_match( "/$Interdit[$i]/",  $Post) )  
 
 		{  
 
 			// On affiche une erreur  
 
 			echo 'Il est strictement Interdit de Spammer !';  
 
// On arrête l'exécution du script  
 
 			exit;  
 
 		}  
 
 	}  
 
 }  
 
ScanDonnee( $PostPseudo, $MotsInterdits);  
 
 ScanDonnee( $PostCommentaire, $MotsInterdits);  
 
 // etc.

Voilà donc normalement avec tout cela il est pratiquement impossible d’avoir des spams sur son formulaire :)
Et comme je le disais plus haut il suffit juste de rajouté des mots interdit dans la liste si par malheur un spammeur à réussi à passé.

Voici un exemple en ligne (essayez d’accèder au formulaire sans passer par ce lien ^^)

Et l’archive de cet exemple : securiser-formulaire_(www.johnstyle.fr)
Cet article a été publié le Jeudi 11 octobre 2007 à 23:36 et est classé dans la catégorie Webmasters.


bon perso j'ai utiliser un autre capcha =>"cryptograph"
http://www.captcha.fr/index.php?langue=fr&page=34&PHPSESSID=a9c01ccba44d39047ef117b99f36e758

qui est fort bien noté par ailleurs...
 
Dernière édition:
Bonsoir,

Je pense que tu peux éditer ton post pour utiliser la balise
PHP:
 :) 

Ton source est surement intéressant mais il est illisible !
 
Bonsoir, :)
Effectivement ça va bien mieux ,(j'avais prevu d'y remettre une couche a la main quand le telephon a sonné pis j'ai zappé...),mais la c'est nickel avec cette cochonette de balise ... :)

Edit je crois qu'il faudra que je vire la partie capcha si le site ne reviens pas.. :/ ,ceci dit j'en ai utiliser un autre qui me semblait mieux (me rappelle pas du nom mais devrais retrouver....) et tout aussi simple a placer...
 
Dernière édition:
oui c'est interessant. Une motivation pour ressortir un certain formulaire jamais terminé ..
 
Retour
Haut