Comment bloquer le spam des formulaires de contact
Bloquer le spam des formulaires de contact : honeypot, piège temporel, CAPTCHA | We.Inc
Bloquez le spam du formulaire de contact de votre site avec un champ honeypot, un piège temporel et un CAPTCHA gratuit comme Turnstile, reCAPTCHA ou hCaptcha, vérifié sur votre serveur. Démo en direct.
Comment bloquer le spam des formulaires de contact
Empilez les contrôles peu coûteux avant les contrôles gênants. Ajoutez un champ honeypot caché que les personnes ne voient jamais mais que les bots remplissent, rejetez les formulaires envoyés plus vite qu'une personne ne pourrait taper, et si du spam passe encore, ajoutez un service CAPTCHA comme Turnstile, reCAPTCHA ou hCaptcha dont votre serveur vérifie le jeton.
Comparaison des défenses anti-spam
Méthode
Ce que remarquent les visiteurs
Bloque
Code serveur requis
Champ honeypot
Rien
Les bots simples qui remplissent tous les champs
Oui, une vérification d'une ligne
Piège temporel
Rien
Les bots qui envoient instantanément
Oui
Cloudflare Turnstile
Généralement rien, parfois une case à cocher
La plupart des envois automatisés
Oui, un appel siteverify
reCAPTCHA v3
Rien ; vous obtenez un score
La plupart des envois automatisés
Oui, vérifier et choisir un seuil
hCaptcha
Parfois un puzzle
La plupart des envois automatisés
Oui, un appel siteverify
Les bots de spam parcourent le web à la recherche de formulaires et les remplissent automatiquement. Votre serveur ne peut pas voir qui tape, donc chaque défense repose sur un comportement qu'une personne n'aurait pas, ou sur un service tiers qui se porte garant du visiteur. Essayez les deux premières défenses dans la démo, puis copiez la vérification serveur qui les accompagne.
Ajoutez un champ supplémentaire au nom tentant, comme website, et masquez-le avec du CSS plutôt qu'avec type=hidden.
Ajoutez un champ caché contenant l'heure d'affichage du formulaire.
Sur le serveur, ignorez tout envoi dont le piège contient une valeur ou dont le délai est inférieur à quelques secondes.
Si le spam continue, ajoutez un widget CAPTCHA et vérifiez son jeton sur le serveur avant d'enregistrer ou d'envoyer le message par e-mail.
Acceptez puis jetez discrètement les envois piégés. Afficher une erreur apprend au bot ce qu'il doit changer.
Donnez au champ piège tabindex="-1" et aria-hidden="true" pour que les utilisateurs du clavier et des lecteurs d'écran n'y arrivent jamais.
Gardez un piège temporel court, environ trois secondes. Le remplissage automatique du navigateur permet à de vraies personnes de finir un formulaire rapidement.
Ne mettez jamais une clé secrète CAPTCHA dans le code de la page. Elle doit rester uniquement sur le serveur.
Questions fréquentes
Qu'est-ce qu'un champ honeypot ?
Un champ présent dans le code du formulaire mais caché aux personnes. Les visiteurs le laissent vide parce qu'ils ne le voient jamais ; les bots qui remplissent tous les champs qu'ils trouvent y mettent quelque chose, ce qui les trahit.
Existe-t-il une alternative gratuite à reCAPTCHA ?
Oui. Cloudflare Turnstile et hCaptcha proposent tous deux des offres gratuites qui fonctionnent de la même façon : un script et un widget sur la page, puis un appel serveur à une adresse siteverify avec votre clé secrète et le jeton du visiteur. Consultez la page des offres actuelles de chaque fournisseur pour connaître les limites.
reCAPTCHA v3 affiche-t-il un puzzle ?
Non. La documentation de Google indique que v3 renvoie un score où 1.0 correspond très probablement à une interaction légitime et 0.0 très probablement à un bot, et conseille de commencer avec un seuil de 0.5. C'est à vous de décider quoi faire des scores bas.
Le widget seul peut-il bloquer le spam ?
Non. La documentation de Cloudflare indique clairement que le widget côté client ne protège pas à lui seul vos formulaires. Un bot peut envoyer directement à l'adresse de votre formulaire, donc le serveur doit vérifier le jeton.
Pourquoi reçois-je encore du spam avec un honeypot ?
Certains bots utilisent un vrai navigateur et ne remplissent que les champs visibles, et une partie du spam est tapée par des personnes. Ajoutez le piège temporel, puis un CAPTCHA. Rejetez aussi les messages remplis de liens si votre formulaire n'en a jamais besoin.
Pourquoi les contrôles gratuits passent en premier
Un honeypot et un piège temporel ne coûtent rien aux visiteurs et attrapent la grande part du spam qui provient de scripts rudimentaires. Un CAPTCHA ajoute un script tiers, une mention dans la politique de confidentialité et parfois un défi, donc gardez-le pour quand vous en avez besoin.
Bien cacher le piège
Utilisez du CSS qui déplace le champ hors de l'écran plutôt que type="hidden", car beaucoup de bots ignorent les champs cachés. Désactivez le remplissage automatique avec autocomplete="off", car un navigateur qui le remplirait ferait passer une vraie personne pour un bot.
MDN précise que les navigateurs peuvent ignorer autocomplete="off" pour les champs de connexion, donc ne nommez pas le piège email ou password.
Vérifier les jetons CAPTCHA sur le serveur
Chaque service place un jeton dans le formulaire. Votre serveur envoie ce jeton avec votre clé secrète à l'adresse siteverify du fournisseur et ne continue que si la réponse indique que success vaut true.
Les jetons Turnstile sont valables 300 secondes et ne peuvent être vérifiés qu'une fois. Les jetons reCAPTCHA v3 durent deux minutes, donc demandez-en un au moment où le visiteur envoie le formulaire, pas au chargement de la page.
Copiez le honeypot et le piège temporel
Le HTML va dans votre formulaire. La vérification serveur est montrée pour Node avec Express, mais la logique tient en trois lignes dans n'importe quel langage.
Formulaire avec un champ honeypot
La classe .hp déplace le piège hors de l'écran. Le champ started est rempli avec l'heure actuelle par le petit script.
Vérification serveur (Node, Express)
Les bots reçoivent la même réponse que les personnes, ils ne peuvent donc pas savoir quel contrôle les a attrapés.
Ajouter Turnstile, reCAPTCHA ou hCaptcha
Les trois fonctionnent de la même manière. Ces détails proviennent de la documentation de chaque fournisseur.
Les services CAPTCHA côte à côte
Turnstile
reCAPTCHA v3
hCaptcha
Script
Chargé depuis Google avec votre clé de site
Widget
<div class="cf-turnstile" data-sitekey>
Pas de widget ; appelez execute à l'envoi
<div class="h-captcha" data-sitekey>
Vérification sur
challenges.cloudflare.com/turnstile/v0/siteverify
Le point de vérification de Google
api.hcaptcha.com/siteverify
Durée du jeton
300 secondes, usage unique
Deux minutes
Voir la documentation du fournisseur
Résultat
success true ou false
success plus un score de 0.0 à 1.0
success true ou false
Vérifier un jeton Turnstile (Node 18 ou plus récent)
Le widget ajoute à votre formulaire un champ nommé cf-turnstile-response. Gardez le secret dans une variable d'environnement.
Démo en direct : honeypot plus piège temporel
Rien n'est envoyé nulle part. Appuyer sur Envoyer lance les mêmes contrôles qu'un serveur, ici même dans votre navigateur.
Votre nom
Message
Site web (laissez ce champ vide)
Agir comme un bot : remplir le champ caché
Envoyer
Recommencer
Remplissez le formulaire et appuyez sur Envoyer pour voir ce que décide la vérification serveur.
Accepté : le piège était vide et {n} secondes se sont écoulées. Un vrai formulaire enverrait maintenant le message.
Rejeté : le champ caché contenait une valeur, cela ressemble donc à un bot. Le visiteur verrait quand même un message de remerciement.
Rejeté : envoyé après {n} secondes, plus vite que le minimum de {m} secondes.
Le champ caché est affiché ici, encadré, pour que vous voyiez ce que voient les bots.