Lundi matin, alerte d’un client : « On a reçu 200 mails de bienvenue en une nuit. »
Je me connecte. 200 comptes clients créés en 48 h. Emails jetables. Zéro commande. Un bot sur le formulaire d’inscription : pas de CAPTCHA, pas de rate limiting.
Nettoyage en 2 h. Puis reCAPTCHA v2 sur inscription + contact, honeypot, validation email renforcée. Depuis : zéro vague.
Ce n’est pas spectaculaire comme un skimmer sur le tunnel de paiement. Mais ça pollue ta base CRM, fait exploser tes quotas mail, et peut dégrader ta réputation d’expéditeur.
Dans ce tuto 2026, tu obtiens :
- Comment ajouter reCAPTCHA à PrestaShop 8 et 9 sans module payant
- Quelle version choisir : v2, v3, Enterprise, Turnstile
- Le bon module selon ta version (EiCaptcha 2.6 sur PS 8, module déclaré 9.x sur PS 9)
- Les tests qui prouvent que ça bloque vraiment (incognito + mobile)
- Ce que le captcha ne suffit plus à faire : honeypot, emails jetables, nettoyage de vague
Spoiler : on ne touche plus à contact-form.tpl comme en PrestaShop 1.6. Sur PrestaShop 9 (Hummingbird, Symfony), un module à jour + les bons hooks, c’est plus propre ; et ça survit aux mises à jour. Besoin que je le pose sur ta boutique ? Écris-moi.
Sommaire
- Pourquoi tes formulaires PrestaShop se font spammer
- reCAPTCHA v2, v3, Enterprise : laquelle choisir en 2026
- PrestaShop 1.7, 8 et 9 : ce qui change vraiment
- Étape 1 : Créer tes clés Google reCAPTCHA
- Étape 2 : Choisir le module gratuit selon ta version
- Étape 3 : Installer et configurer le module
- Étape 4 : Tester (desktop, mobile, cache)
- CSS : afficher proprement la case (Classic / Hummingbird)
- Honeypot, emails jetables, rate limiting : la couche 2
- Tu as déjà 200 faux comptes : comment nettoyer
- Ça ne marche pas : checklist de dépannage
- FAQ : reCAPTCHA PrestaShop 8 et 9
- Conclusion
1. Pourquoi tes formulaires PrestaShop se font spammer
Dès qu’un formulaire est public, il est une API ouverte. Les bots n’ont pas besoin de « casser » PrestaShop : ils POST-ent sur /contact, /connexion (création de compte) et parfois la newsletter. Sans challenge, ça passe.
Les cibles les plus fréquentes :
- Formulaire de contact ; liens malveillants, « partenariats », SEO spam
- Création de compte client ; emails jetables, mails de bienvenue en rafale, base CRM pourrie
- Newsletter ; opt-in fictifs qui plombent tes taux d’ouverture
- Mot de passe oublié ; moins visible, mais utile aux attaques par énumération
Le coût n’est pas « 2 minutes à trier ». C’est : quotas transactionnels (Brevo, Mailjet, SMTP), réputation d’expéditeur, clients légitimes qui n’ouvrent plus tes mails de commande, et un back-office clients illisible.
Si tu es encore sur une 1.7 figée, le fond du problème est le même ; l’ancien tuto reCAPTCHA v2 pour PrestaShop 1.7 reste une archive. La méthode 2026 ci-dessous la remplace pour PS 8 / 9.
2. reCAPTCHA v2, v3, Enterprise : laquelle choisir en 2026
Un captcha, c’est un test « humain vs robot ». reCAPTCHA, c’est la version Google. En 2026, tu croises quatre familles ; et beaucoup de tutos mélangent encore les clés.
| Type | Ce que voit le client | Idéal pour | Piège |
|---|---|---|---|
| v2 « case à cocher » | « Je ne suis pas un robot », parfois des images | Contact, inscription | Friction légère, mais debug simple |
| v2 invisible | Rien, challenge seulement si doute | Parcours où tu veux peu de friction | Plus dur à diagnostiquer |
| v3 (score) | Rien | Monitoring + seuil | Seuil mal réglé = faux positifs ou spam qui passe |
| Turnstile (Cloudflare) | Widget discret | Alternative plus « RGPD-friendly » | Le module doit le supporter |
Mon avis terrain : pour une boutique PME, pars sur reCAPTCHA v2 case à cocher sur contact + inscription. C’est visible, ça rassure, et tu vois tout de suite si ça casse. La v3, je la réserve quand le module gère un seuil (EiCaptcha 2.6 le fait) et que tu as le temps de l’ajuster.
Côté Google : les clés se gèrent de plus en plus dans Google Cloud (Security → reCAPTCHA). La console historique google.com/recaptcha/admin reste le chemin le plus simple pour créer une clé « Challenge / checkbox » ou « Score-based ». La plupart des modules PrestaShop attendent encore une clé du site + clé secrète (mode classique). Après migration Cloud, ces clés continuent en général de fonctionner avec le même module ; à condition de ne pas mélanger une clé v3 avec un module réglé en v2.
Quota : Google documente un socle gratuit d’assessments (ordre de grandeur : 10 000 / mois sur l’offre Cloud). Pour un contact + des inscriptions, une PME y reste. Un gros trafic catalogue + login partout, c’est un autre sujet (Turnstile, ou facturation Cloud).
3. PrestaShop 1.7, 8 et 9 : ce qui change vraiment
Le spam n’a pas changé. L’architecture si :
- PS 1.6 :
contact-form.tplà la racine du thème. Les copier-coller de 2016 cassent dès que tu changes de thème. - PS 1.7 / 8 + thème Classic : module natif
contactform, templates dans le thème (templates/customer/), hooks. Un module comme EiCaptcha s’appuie là-dessus. - PS 9 + Hummingbird : nouveau thème par défaut, formulaires plus Symfony. Un module qui ne déclare que 1.7/8 peut installer… et ne rien afficher, ou casser l’inscription au checkout.
EiCaptcha (nenes25/eicaptcha) est le module open source que je recommande depuis des années sur 1.7 / 8 ; j’avais même poussé un correctif CSS dès la 2.0.1. La branche 2.6.0 (fin 2025) cible 1.7 et 8, avec score v3 configurable. La ligne 3.x (PrestaShop 9 only, PHP 8.1+) était en cours côté GitHub en 2026 : à vérifier sur la page Releases au moment où tu installes.
Sur une PrestaShop 9 en production aujourd’hui, je prends un module qui déclare 9.x : par exemple Tec Spam Guard (MIT, reCAPTCHA + Turnstile + emails jetables) ou le reCAPTCHA gratuit PrestaHero (contact / inscription / login). Pas de religion : la fiche « compatible 9.x » + un test staging battent n’importe quel nom connu.
4. Étape 1 : Créer tes clés Google reCAPTCHA
- Ouvre la console reCAPTCHA (compte Google de la boîte, pas ton Gmail perso si tu peux).
- Crée un site / une clé. Libellé : le nom de la boutique (ex. « Bohomane prod »).
- Type : Challenge / case à cocher (v2) si tu suis ce tuto « simple ». Score-based (v3) seulement si ton module le demande clairement.
- Domaines :
votreboutique.fretwww.votreboutique.fr. Ajoute le domaine de préprod si tu testes là-bas. - Valide les conditions. Tu obtiens une clé du site (publique, front) et une clé secrète (serveur). La secrète = mot de passe : pas dans un ticket Trello public.
Si Google te pousse vers Cloud Console : Security → reCAPTCHA → Create key. Même logique. Si ton module PrestaShop a un mode « Enterprise » (Key ID + Project ID + API key), c’est un autre formulaire ; ne colle pas une clé Enterprise dans un champ « secret key » classique.
5. Étape 2 : Choisir le module gratuit selon ta version
| Version PrestaShop | Module gratuit | Formulaires | À retenir |
|---|---|---|---|
| 1.7 / 8 | EiCaptcha 2.6.x | Contact, compte, newsletter | Télécharge le ZIP des Releases, pas « Code → Download ZIP » (vendor Composer manquant) |
| 9 | Module déclaré 9.x (Tec Spam Guard, PrestaHero free, EiCaptcha 3.x s’il est sorti) | Contact, compte, login, parfois checkout | Teste sur staging. Hummingbird n’est pas Classic. |
| 1.6 | EiCaptcha 0.4.x (legacy) | Contact | Le vrai sujet, c’est la migration 1.7 → 8/9 |
Prérequis fréquents : module natif contactform activé. Pour la newsletter EiCaptcha : ps_emailsubscription ≥ 2.6.0.
6. Étape 3 : Installer et configurer le module
Sauvegarde (fichiers + BDD) avant d’uploader un ZIP. Cinq minutes, pas un optionnel.
- Back-office → Modules → Module Manager → Upload a module / « Ajouter un module ».
- Envoie le ZIP. Installe. Si PrestaShop refuse la version : tu n’as pas le bon ZIP (PS 9 vs 2.6, ou l’inverse).
- Configure : colle clé du site + clé secrète.
- Active les formulaires : contact et création de compte a minima. Login et newsletter selon ta surface d’attaque.
- Si le module propose v2 / v3 : aligne-le sur le type de clé Google. Un mismatch = widget invisible ou validation qui échoue toujours.
- Enregistre. Vide le cache PrestaShop (Performances). Sur PS 9, vide aussi le cache Symfony si tu as la main SSH :
php bin/console cache:clear.
Tu n’as pas à coller <div class="g-recaptcha"> dans le thème si le module est compatible. C’était le bricolage 1.6. Sur 8 / 9, c’est un anti-pattern : tu perds la validation serveur au prochain update de thème.
7. Étape 4 : Tester (desktop, mobile, cache)
Un widget qui s’affiche ne prouve rien. La preuve, c’est le refus serveur.
- Déconnecte-toi du back-office. Fenêtre privée. Idéalement le téléphone en 4G (comme pour un test anti-skimmer : l’admin n’est pas le client).
- Contact : envoie un message sans cocher. Tu dois être bloqué. Puis avec la case : le mail part.
- Création de compte : même protocole. Vérifie qu’un compte n’est pas créé en base si le captcha est vide.
- Mobile : la case v2 fait 304×78 px. Sur Classic, elle passe parfois sous le bouton ; d’où le CSS plus bas.
- Newsletter / checkout (si activés) : un bot moderne s’inscrit souvent au tunnel, pas seulement sur
/connexion.
Si « ça marche chez moi en admin » mais pas en privé : cache, CDN (Cloudflare Rocket Loader qui casse le JS Google), ou module de perf qui concatène les scripts.
8. CSS : afficher proprement la case (Classic / Hummingbird)
Sur Classic, le widget se cale mal à droite / trop large en mobile. Colle ceci à la fin de themes/ton-theme/assets/css/custom.css (enfant, pas le parent que tu écrases à chaque update) :
/* Style reCAPTCHA - thème Classic (PS 1.7 / 8, parfois 9) */
.contact-form form .form-fields #captcha-box > div {
float: right;
}
.contact-form form .form-footer {
clear: both;
padding-top: 1rem;
}
@media screen and (max-width: 767px) {
#contact #left-column,
#contact #content-wrapper {
padding-left: 0 !important;
padding-right: 0 !important;
width: 100%;
}
.contact-form form .form-fields #captcha-box {
position: relative;
min-height: 78px;
}
.contact-form form .form-fields #captcha-box > div {
float: none;
position: absolute;
left: 50%;
top: 0;
transform: translate(-50%, 0);
}
}
@media screen and (max-width: 379px) {
.register-form form .form-group .g-recaptcha {
position: relative;
min-height: 78px;
}
.register-form form .form-group .g-recaptcha > div {
float: none;
position: absolute;
left: 50%;
top: 0;
transform: translate(-50%, 0);
}
}
Sur Hummingbird, ne copie pas ce CSS les yeux fermés : les classes ne sont pas les mêmes. Inspecte le DOM (#captcha-box, .g-recaptcha) et adapte. Un padding / min-height: 78px suffit souvent pour que le bouton d’envoi ne recouvre pas la case.
9. Honeypot, emails jetables, rate limiting : la couche 2
En 2026, les fermes à captcha existent. reCAPTCHA réduit le bruit, il ne le supprime pas. Sur le client des 200 comptes, le combo qui a tenu :
- reCAPTCHA v2 sur inscription + contact
- Honeypot : champ caché (CSS
left: -9999pxoudisplay:none), nom typeurl/website. Un humain le laisse vide. Un bot le remplit. Rejet côté serveur (hookactionSubmitAccountBefore/ contact), pas seulement en JS. - Emails jetables : yopmail, guerrillamail, tempmail, etc. Un module comme Tec Spam Guard le fait. Sinon une liste de domaines + rejet à l’inscription.
- Rate limiting : Cloudflare, Fail2ban, ou au minimum un WAF. 200 POST / heure sur
création de comptedepuis la même classe d’IP, ce n’est pas un client indécis.
Pour une première barrière « nom + URL dans le prénom », j’avais documenté des overrides Validate.php / Customer.php dans Comment protéger PrestaShop des comptes clients spams. Sur PS 8 / 9, je ne recopie plus ces overrides tels quels : le $definition a bougé. Captcha + emails jetables + honeypot, c’est plus maintenable qu’un override core figé en 2019.
10. Tu as déjà 200 faux comptes : comment nettoyer
- Back-office → Clients. Filtre par date d’inscription (les 48 h de la vague).
- Croise : 0 commande, domaines jetables, prénoms identiques, même IP.
- Exporte le filtre (CSV) avant de supprimer ; pour le support si un vrai client était dans le lot.
- Supprime. Ne vide pas toute la table clients.
- Vérifie la file mail (module mail, logs SMTP) : les 200 « bienvenue » ont peut-être déjà brûlé un quota.
- Ensuite seulement pose le captcha. Nettoyer sans fermer la porte, c’est recommencer mardi.
11. Ça ne marche pas : checklist de dépannage
| Symptôme | Cause fréquente | Quoi faire |
|---|---|---|
| Pas de case | Cache, mauvais thème, clé v3 dans un module v2, domaine absent | Vider cache + CDN. Vérifier le type de clé et www / non-www |
| Toujours refusé | Clé secrète inversée, firewall sortant vers Google | Recoller les clés. Tester siteverify depuis le serveur |
| OK en admin, KO en privé | Cache page, Cloudflare, minification JS | Désactiver Rocket Loader / combine JS sur les pages compte et contact |
| PS 9 : installé, rien | Module 1.7/8 sur Hummingbird | Module déclaré 9.x, test staging |
| Newsletter passe encore | Hook newsletter non géré | Activer l’option, vérifier ps_emailsubscription |
| Checkout guest sans captcha | L’inscription n’est pas /connexion |
Module qui couvre l’identité checkout (surtout en OPC PS 9.2) |
Thème lourd, checkout one-page, formulaire d’un module tiers : le captcha « contactform » ne s’y accroche pas tout seul. C’est du sur-mesure ; ticket d’intervention ou accompagnement freelance.
12. FAQ : reCAPTCHA PrestaShop 8 et 9
reCAPTCHA fonctionne-t-il sur PrestaShop 9 ?
Oui, à condition d’utiliser un module qui déclare PrestaShop 9 (et de tester sur Hummingbird si c’est ton thème). Ce n’est plus le copier-coller contact-form.tpl de PrestaShop 1.6. EiCaptcha 2.6 est le standard 1.7/8 ; la 3.x vise PS 9 ; vérifie les Releases GitHub le jour J.
Faut-il un module payant pour ajouter reCAPTCHA à PrestaShop ?
Non. EiCaptcha (GitHub) et plusieurs modules gratuits suffisent pour contact + inscription. Un module payant se justifie si tu veux support éditeur, Turnstile, blacklist, checkout et emails jetables dans la même interface.
reCAPTCHA v2 ou v3 : lequel choisir sur une boutique ?
v2 case à cocher pour démarrer : visible, débogable, efficace contre le brute-force d’inscription. v3 si tu veux zéro friction et que tu acceptes de régler un seuil (et de surveiller les faux rejets clients).
Pourquoi la case reCAPTCHA ne s’affiche pas sur PrestaShop ?
Dans l’ordre : cache (Smarty + Symfony + CDN), domaine Google incomplet (www), type de clé (v2 vs v3), JS Google bloqué par un module de perf, thème enfant qui n’appelle pas le hook. Teste en navigation privée après avoir vidé tous les caches.
reCAPTCHA suffit-il contre les bots en 2026 ?
Non, plus comme seule barrière. Les fermes à captcha existent. Combine captcha + honeypot + rejet des emails jetables + rate limiting. C’est ce combo qui a arrêté la vague des 200 comptes, pas la case toute seule.
Cloudflare Turnstile est-il mieux que Google reCAPTCHA ?
Souvent plus agréable (vie privée, UX). Il faut un module PrestaShop qui le parle (Tec Spam Guard le fait). Si ton module ne gère que Google, reste sur reCAPTCHA v2 ; un captcha qui marche bat une « meilleure » techno non branchée.
Comment supprimer 200 faux comptes clients PrestaShop ?
Filtre par date + 0 commande + domaines jetables, export CSV, puis suppression. Pose le captcha tout de suite après, sinon la vague revient. Ne vide pas toute la table clients.
reCAPTCHA ralentit-il le site ou le SEO ?
Le script Google s’ajoute sur les pages où le module le charge (contact, compte), pas sur tout le catalogue si tu configures correctement. Ce n’est pas un sujet Core Web Vitals de homepage. Évite « charger le script partout » sauf besoin réel.
Faut-il un captcha sur le tunnel de commande PrestaShop 9 ?
Si tu autorises la création de compte / l’invité au checkout, oui : les bots ne passent pas que par /connexion. Surtout avec un One Page Checkout. Vérifie que ton module couvre cette étape, pas seulement la page compte isolée.
Les clés Google reCAPTCHA sont-elles encore gratuites en 2026 ?
Oui pour un usage boutique classique, via le socle gratuit Cloud documenté par Google. Au-delà, facturation possible. Si tu exploses le quota, Turnstile ou un WAF devient plus intéressant qu’une case à 50 000 assessments.
Hummingbird change-t-il l’installation du captcha ?
Oui : autres templates, autres classes CSS. Un module pensé Classic peut s’installer sans rien afficher. Choisis un module testé PS 9 / Hummingbird, et n’applique le CSS Classic de ce tuto que si tes classes DOM matchent.
Où trouver un tuto reCAPTCHA PrestaShop 1.7 ?
L’ancienne version est ici : Ajouter reCAPTCHA v2 pour PrestaShop 1.7. Pour une boutique encore en 8 ou déjà en 9, reste sur cette page ; c’est le guide à jour.
13. Conclusion
Ajouter reCAPTCHA à PrestaShop, ce n’est plus un exploit FTP de 2016. En 2026, sur PS 8 et 9, la recette est : bonnes clés Google (v2 pour démarrer), module gratuit compatible avec ta version, tests en navigation privée, puis honeypot + emails jetables parce que la case seule ne tient plus face à une ferme de bots.
Si tes formulaires d’inscription et de contact ne sont pas protégés, tu n’as pas un « petit spam » : tu as une porte ouverte sur ta CRM et tes quotas mail. Ferme-la ce week-end.
Tu veux que je pose reCAPTCHA, honeypot et le nettoyage de vague sur ta boutique ; sans module payant inutile, avec un test staging ? Discutons-en →
Pour aller plus loin : politique de sécurité thèmes et modules, guide modules PrestaShop 2026, et le protocole skimmer 2026 si tu n’as pas audité ton tunnel de paiement ce mois-ci.
