35 votes

Prévention/réduction des spams - Formulaire de contact ?

Je souhaite ajouter un simple formulaire de contact à mon site Web afin que les clients puissent me contacter facilement.

<form>
    NAME
    <input type='text' name='name' />
    EMAIL
    <input type='text' name='email' />
    MESSAGE
    <textarea name='message' />
    <input type='submit' />
</form>

Ce formulaire m'enverrait simplement le message du client par courriel.

Mais, je veux aussi réduire (non, je ne dis pas éliminer mais au moins réduire), le SPAM.

J'ai envisagé d'utiliser des CAPTCHA mais, en fin de compte, je ne veux pas gêner le client en l'obligeant à remplir des informations supplémentaires.

Avez-vous une idée d'une bonne méthode simple de prévention/réduction du spam que je pourrais utiliser pour mon formulaire de contact ?

1 votes

Je pense que CAPTCHA est une bonne idée, ce n'est pas beaucoup d'informations supplémentaires. Personnellement, j'ai développé un formulaire de contact et je recevais, au moins, 300 e-mails par jour de spambots, je regrette de ne pas avoir intégré une fonctionnalité CAPTCHA.

0 votes

Voir aussi stackoverflow.com/questions/485106/ pour d'autres idées.

0 votes

Excellentes idées/commentaires dans ce billet de StackOverflow également.

66voto

Wim Points 7248

Voici une astuce très simple que j'ai utilisée avec un taux de réussite étonnamment bon : Fournir un champ de texte qui est caché aux utilisateurs humains avec style="display: none" mais avec un nom séduisant comme email . La plupart des robots rempliront ce champ, mais les humains ne peuvent pas le voir, donc ils ne le feront pas. Sur le serveur, assurez-vous simplement que le champ est vide, sinon traitez la soumission comme un spam.

1 votes

Excellente idée. Une combinaison de ton idée et de Graza pourrait faire l'affaire.

6 votes

C'est une excellente idée ! Alternativement, si les robots sont assez intelligents pour ignorer ces balises, mettez display:none dynamiquement en javascript, et ajoutez un commentaire demandant à l'utilisateur de NE PAS remplir le champ en cas d'échec du javascript.

5 votes

J'adore cette idée. Les CAPTCHAs sont une douleur dans le cou. La prévention du spam devrait consister à détecter les bots, et non à prouver que l'utilisateur est humain.

7voto

David Tesch Points 21

Si vous voulez une solution entièrement frontale, j'ai eu du succès récemment en laissant l'attribut action du formulaire vide, et en le remplissant via une fonction $(document).ready. La plupart des spambots utilisent un navigateur dont le javascript est désactivé, ou cherchent des champs cachés pour éviter d'être détectés.

Exemple :

Votre html serait :

<form method="POST" action="" id="contact-form">

et n'importe où dans cette page, vous pouvez l'utiliser pour la remplir.

<script>
        $(document).ready(function(){
                 $("#contact-form").attr("action", "/yourMailScript.cgi");
        });
</script>

Un navigateur robot sans javascript n'obtiendra pas d'action de formulaire, et il obtiendra un 404 lors de la soumission. Toute personne disposant d'un navigateur normal (à moins qu'elle n'ait désactivé JS pour des raisons paranoïaques) obtiendra le comportement normal.

0 votes

J'utilise une technique similaire pour remplacer la valeur de l'action. Par défaut, il va vers un endroit de type pot de miel. Mais j'utilise un événement on-click/on-focus pour changer la valeur de l'action. Il est difficile pour un robot de simuler cela, je pense. Voir ma réponse ci-dessous.

6voto

Graza Points 3474

Le seul moyen (côté client) autre qu'une confirmation de l'utilisateur de type CAPTCHA serait d'écrire le tout de manière dynamique. Un grand nombre de robots (mais pas tous) ignoreraient probablement le contenu dynamique. Par exemple,

document.write("<"+"form>"
  +" NAME "
  +" <"+"input type='text' name='name' /> "
  +"EMAIL "
  +"<"+"input type='text' name='email' /> "
  +"MESSAGE "
  +"<"+"textarea name='message' /> "
  +"<"+"input type='submit' /> "
+"<\/form> ");

0 votes

Je fais quelque chose de très similaire en définissant simplement l'adresse électronique de façon dynamique au chargement de la page. L'adresse électronique ne se présente pas sous la forme d'une chaîne unique, par ex : "my"+"email@"+domain+".com"

1 votes

@Alysko : Vraiment ? Je ne pense pas. Tu veux dire que tous les bots comprennent et interprètent parfaitement Javascript ? Le seul problème avec ça, c'est que tous les clients ne comprennent pas non plus Javascript...

0 votes

Quelques Les bots le traiteraient, mais je pense que quiconque écrit un bot pour la vitesse essaierait de limiter la quantité de traitement du script, donc beaucoup le sauteraient. @Tomas - Je suis d'accord sur le fait que tous les clients ne le comprennent pas. Cette approche rompt complètement avec la dégradation progressive ou l'amélioration progressive. @Rob - Je fais des choses similaires, mais généralement sur des lignes séparées, et avec la @ en hexagone, par exemple m="my";m+="email\x40";m+="dom";m+="ain.c";m+="om"; - une solution paranoïaque, mais j'espère qu'elle trompera tous les robots. Cependant, une fois de plus, cela casse la dégradation progressive. La solution de Wim a l'air géniale

5voto

Milan Babuškov Points 20423

Utilisez un compte de messagerie Google ou Yahoo. Ils ont de bons filtres anti-SPAM.

1 votes

C'est une bonne idée, gmail supporte la redirection automatique des emails, non ? Cela pourrait bien fonctionner. C'est probablement la mise en œuvre la plus simple ET vous ne risquez pas de perdre des clients potentiels à cause de la frustration liée au captcha.

1 votes

+1 ; ou tout autre filtre anti-spam de la boîte de réception. Il n'y a aucune raison de surcharger l'utilisateur avec un CAPTCHA ou les navigateurs des utilisateurs avec des astuces html. C'est un problème de boîte de réception.

1 votes

Mais si un site est exploité par plusieurs bots, il y a une chance que le site soit détruit. Ce n'est pas la solution pour empêcher le spam en utilisant Yahoo ou Gmail. Vous devez résoudre ce problème du côté de votre site Web.

0voto

citricsquid Points 940
  1. Lors du traitement, vérifiez les en-têtes des utilisateurs, mais la plupart des robots fournissent des en-têtes.
  2. Essayez de résoudre l'adresse IP fournie ; si elle se résout et fournit une page Web, vous pouvez supposer qu'elle est envoyée par un serveur et qu'il y a de fortes chances qu'il s'agisse d'un robot.
  3. Posez une question, par exemple "Quel est le nom de ce site Web ?" ou "Combien font 5 + 2 ?", mais les robots peuvent les contourner assez facilement.

Je recommanderais personnellement une combinaison de ce qui précède : Lorsque le formulaire est soumis, vérifier les en-têtes de l'utilisateur et voir si l'adresse IP est un serveur web et si l'un ou l'autre est vrai, présenter le captcha. Cependant, si c'était moi, j'implémenterais simplement recaptcha C'est un excellent service, presque 100% sécurisé et très facile pour les utilisateurs finaux, je l'adore.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X