Moyen d'éviter le SPAM de robots sur un formulaire de contact ?

Bonjour,

Alors que mon site n’est même pas complètement en ligne (j’ai pour le moment une page d’accueil d’attente), je reçois tous les jours des SPAM par des robots grâce à mon formulaire de contact (http://www.zerobug.fr/contact.php). Tous les spams arrivent avec des adresses GMAIL. J’interdirai bien les adresses Gmail, mais assez risqué si plusieurs de mes clients ont des adresses Gmail.
Connaitriez-vous un moyen à mettre en place afin que je sois pas envahi par la Spam de ces robots ?

Merci.

C’est la faute au lien que tu as mis sur ta page. Soit tu le retire, en imposant aux visiteurs l’utilisation du formulaire, soit tu modifie un caractère, afin que le mail soit inutilisable comme tel. Par exemple, contact[at]tonsite[point]fr. Les visiteurs remplaceront d’eux même [at] par une arrobase et [point] par un point.

Sinon, tu peux aussi sécuriser le formulaire contre les robots (si l’envie leur prend de le remplir). Sachant qu’un robot remplis tous les champs d’un formulaire, tu crée un champ invisible (input type=“hidden”), que tu vas par exemple appeler “name”. Tu n’y définis rien comme valeur. Un utilisateur “normal” ne voyant pas ce champ, il restera vide, mais le robot lui, va le remplir avec du texte. Donc dans le traitement, si $_POST[‘name’] n’est pas vide, tu n’evoie pas le formulaire, car cela voudra dire que c’est un robot qui l’a rempli. Astucieux n’est-ce pas ? :slight_smile:


edit : le lien vers le mail est également sur la page d'accueil et dans le pied-de-page. C'est donc la source de ton attaque SPAM. Je te conseilles donc de remplacer ces liens mail par un lien vers le formulaire, démuni de toute adresse mail visible (comme expliqué ci-dessus).

Non, les seuls spam que j’ai sont ceux à partir du formulaire, avec le formulaire rempli de liens.
Je n’ai jamais reçu de SPAM à partir des liens mails directs, car j’ai essayé de protéger cela en faisant un script de ce type :

A quoi ressemblerait le code pour le cas où le champ “hidden” serait rempli et que le formulaire ne soit pas actif ?

A quoi ressemble le champ Code Postal dans les mails générés par les robots ?
Déjà si tu élimines tout les messages pour lesquels ce champ est manifestement incorrect, tu dois en diminuer fortement le nombre, non ?

Et si c’est un code postal Belge ?
Pour le champ hidden, tu rajoutes la ligne suivante avant le bouton d’envoi du formulaire par exemple :

 <imput type="hidden" name="name" value="" /> 

Et dans le traitement PHP qui envoie le mail :


if(!empty($_POST['name']) || $_POST['name'] !== '')
{ header("Location: http: //www.zerobug.fr");...[/url] }
else {
// traitement d'envoi du mail \\

}

Edit : la balise code merdouille, pense à enlever l’espace dans l’url contenu dans header()
Edité le 01/09/2007 à 11:23

utilise un captcha.

pear.php.net…
pear.php.net…

quick & fast

Tu as une solution simple, puisque tu es en PHP, c’est de faire un formulaire qui ne “ressemble” à rien, c’est à dire que le robot ne pourra pas comprendre simplement : là, un robot se base sur les noms des champs, ex: ‘name’.

Donc :

  1. vérifier la validité des champs (si tu ne le fais pas déjà)
  2. nommer tes champs aléatoirement, avec en session un moyen qui te permette de récupérer la relation nom aléatoire => nom réel (moi personnellement, le champ pour l’image servant à coincer les spammers est généré avec une clef aléatoire)

Cette solution peut en plus être plus sévère en ajoutant un cryptage afin d’éviter que le spammer puisse reconstituer le bon champ (ainsi la clef est cryptée, donc peut contenir n’importe quoi sans qu’il ne sache quoi, et sinon t’as les sessions ;):))

Enfin, plutôt que de bannir gmail, conserve l’IP des spammers. Ca te permettra d’agir en conséquences (éventuellement, en bannissant l’ip, mais les robots de spam sont avant tout des pc zombis :/)

Bon, j’ai mis ce code :

Mais lors du traitement d’un formulaire normal, il me met quand même une erreur et je ne reçois plus de mail :

A la ligne 168, j’ai ça :

Jette un oeil là : www.google.fr…

Y’a pas une erreur au niveau de

if(!empty($_POST['protect']) || $_POST['protect'] !== '')

??

Ca veut dire quoi exactement ?

ça veut dire que tu as déja envoyé des informations au navigateur. Ce code doit être inscrit avant tout affichage (pas d’echo, pas d’html), sinon le résultat est une erreur come celle-ci.

J’ai essayé de mettre ce code sur la première ligne de la page :

<?php
if(!empty($_POST['protect']) || $_POST['protect'] !== '')
{header('Location:http://www.zerobug.fr');}
else {
?>

Mais il me renvoit automatiquement sur la page location.
C’est pour ça que je demandais ce que voulais exactement dire if(!empty($_POST[‘protect’]) || $_POST[‘protect’] !== ‘’) !

et bien ça veut dire “si le champ “protect” du formulaire envoyé n’est pas vide, ou s’il contient autre chose qu’un vide, on redirige vers zerobug.fr. Sinon, on traite le mail”.
à la place du header location, fais un echo $_POST[‘protect’];, et retentes.

Juste pour l’info, ce bout de code tu le mets sur la page qui traite le mail hein, pas sur le formulaire, il sert à rien sinon. Sur le formulaire tu mets juste le champ hidden.

Oui, je mets bien le code sur la page de traitement.
Avec echo $POST…, ça marche toujours pas. Plus de message d’erreur, mais le mail n’arrive plus non plus :frowning:

oui, c’est normal qu’il n’y ai plus de message d’erreur, c’est pour voir ce que retourne $_POST[‘protect’].
Et dans ton formulaire, le champ protect est sous quelle forme ? on peut avoir le code ?

Le champ protect est comme ça :

<imput type="hidden" name="protect" value="" /> 

La page de contact est ici : www.zerobug.fr/contact.php
La page de traitememt : www.zerobug/contact_mail.php

Après essai : [quote=""]
Parse error: syntax error, unexpected ‘}’ in /home.3/zerobug/www/contact_mail.php on line 174
[/quote]
Tu as oublié de fermer une accolade quelque part…

Ca devrait refonctionner maintenant.

Bon, toujours pas de solution à mon script. Je ne sais pas où le mettre sur la page de traitement pour que ça fonctionne correctement.

Ca m’embête d’être aussi prêt du but et de ne pas y arriver, car je continue d’avoir en moyenne 10 spams par jour à partir du formulaire.