Vous avez aussi reçu beaucoup de spam via le formulaire de contact PrestaShop ? C’est énervant, ces robots n’ont que ça en tête vous inonder de message et par la même occasion casser la réputation de votre domaine. Corrigeons cela avec un bout de code !
Le spam sur PrestaShop c’est grave ? Faut-il faire attention ?
Tout d’abord, il est désagréable de recevoir des mails en boucle de robots avec un contenu incompréhensible. Cela vous fait perdre du temps et vous inonde de mails (parfois le spam se déroule par période).
Les messages de spam vont remplir votre PrestaShop de données obsolètes, notamment dans le SAV. Il n’est pas bon de stocker dans sa base de données des données douteuses, on ne sait jamais ce qui pourrait se passer si tout à coup l’un de ces liens était par « mégarde » exécuté.
De plus, si votre formulaire de contact envoie une copie du mail au client, cela veut dire que votre boutique PrestaShop va relayer du spam pour les pirates. Ils se servent de vous pour envoyer des mails malveillants, grâce à la confirmation du message client (ce qui va nuire à la réputation de votre domaine).
En général j’utilise reCatpcha de Google pour sécuriser
C’est ce que je fais habituellement sur PrestaShop, j’utilise le module reCatpcha qui est bien pratique, mais cela présente aussi des inconvénients. Personnellement je me dis qu’il serait bien de pouvoir se passer d’un module pour sécuriser ce genre de type de page connu pour des problèmes récurrents liés au spam (il faudrait idéalement une sécurité native intégrée).
Le 1er problème d’utiliser Google reCatpcha c’est qu’il faut se connecter à Google avec une API et donc charger des fichiers JavaScript supplémentaires qui vont ralentir votre boutique PrestaShop (voir comment rendre rapide PrestaShop). L’intégration n’est pas forcément 100% transparente pour le client qui doit cocher « Je ne suis pas un robot »… (la nouvelle version V3 semble travailler en arrière-plan directement).
Comprendre le vilain spam, pour mieux le bloquer
Pour bloquer le spam, il faut se poser les bonnes questions et analyser les messages qui sont relayés. Dans tous les cas de message spam, j’ai constaté qu’il y avait soit une url de site web ou du code HTML.
En partant de ce principe la règle est assez simple, il faut simplement bloquer les messages soumis par le formulaire de contact et qui intègrent un lien ou du HTML. (voir aussi ce billet : comment optimiser le rendu du formulaire de contact PrestaShop).
L’idéale serait d’avoir en « natif » dans la configuration du module de contact PrestaShop une option de ce type « Bloquer le HTML », « Bloquer les liens »… cela nécessite peu de code et c’est diaboliquement efficace.
Et les clients qui veulent envoyer des liens et du HTML ?
En fait dans les cas de spam sur PrestaShop j’ai été voir les messages des clients « réels » stockés en base de données et le verdict est assez clair.
Les clients « normaux » ne postent jamais de HTML dans leur message et très rarement des liens. S’ils veulent parler d’un produit, ils ne font pas le lien vers la page, mais vont donner par exemple une référence ou nom du produit.
En partant de ce principe, on peut dire que les clients dans la plupart des cas n’ont pas besoin d’utiliser de liens ou de code HTML dans le message, donc autant bloquer cette possibilité pour se préserver du spam.
Les solutions populaires anti-spam sont souvent détournées
Aussi incroyable que ça puisse paraitre, mais je trouve que souvent les sécurités anti-spam sont souvent « moyennement » efficaces et vous savez pourquoi ? Parce que les pirates sont souvent plus rapides que ceux qui créent le système de sécurité.
Combien de fois j’ai installé des systèmes de captcha « populaires » qui laissaient quand même passer du spam… (fiou). Et vous savez pourquoi ? Parce ces systèmes utilisent toujours les mêmes principes et par la force du temps les robots sont capables de les décrypter.
Sur King-Avis via le formulaire de contact j’ai mis en place un captcha maison. Le robot doit trouver le code en orange et la couleur est injectée en CSS la technique est redoutable zéro spam (un concept intéressant à transposer sur PrestaShop un jour qui sait…).
Pour ce tutoriel Prestashop vous avez à disposition :
- 1 x contactform.php (formulaire de contact sécurisé)
Résumé de la vidéo : Sécuriser la page de contact PrestaShop du spam
- On regarde d’abord les options du module en back-office PrestaShop, on active la notification pour le marchand, mais on retire le mail de confirmation pour le client (se prémunir d’être un relai de spam).
- Ensuite, on teste la soumission du formulaire pour voir comment celui-ci réagit. On peut consulter le résultat du stockage en back-office via l’onglet du SAV avec le détail du message.
- Puis, on va modifier la méthode « sendMessage » du fichier « contactform.php » en ajoutant le contrôle sur le HTML et les liens. Le blocage est instantané et les injections en base de données ne peuvent plus avoir lieu. Vous êtes à présent protégé du spam.
Mais c’est trop bien! Merci Germain!
J’ai refusé dès le début de mettre le captcha car c’est encore et encore une étape de contrôle de quelque chose pour faire une truc basique, envoyer un message dans notre cas. J’ai des spammeurs qui se sont installé sur mon formulaire avec un message par semaine qui ne vient pas d’un client mais d’un spammeur, trop peu pour me décidé a mettre du captcha mais trop pour que se soit acceptable.
Code court, efficace, simple, et franchement utile.
Je viens de checker et tout les courriels indésirable ont dans leur message un « https » ou un « www ».
Mon SAV va être plus propre, et sans soumettre mes clients au captcha.
Merci pour le retour positif, je pense que c’est le chemin le plus simple pour éradiquer à 100% le spam une bonne fois pour toutes 😉
Bonjour et MERCI Germain !
Ca fait un bon moment que je te suis maintenant et j’ai pris pas mal de tes bouts de codes.
C’est souvent simple et efficace, Top !
C’est en place et ca fonctionne parfaitement. 15minutes et c’est réglé.
Je confirme que tous message spams ont un lien…
Ca donne envie de te filer les clé de la boutique pour mettre tous ca au propre, mais en attendant c’est de la débrouille avec tes tutos, et ca fonctionne !
Merci encore.
Sept7.fr
Bonjour Yves,
Parfait, content de voir que ça semble être efficace.
Bonne continuation !
Salut,
le point négatif de cette méthode est si un client pose une question sur un article en indiquant l’url de la fiche article concerné au travers du formulaire de contact, celui-ci sera bloqué.
Hello,
C’est exact, mais le client verra l’erreur et statistiquement il y a peu de clients qui postent un lien.
C’est un choix assez « tranché », mais qui permet de résoudre définitivement le SPAM sur PrestaShop.
A bientôt !
Merci beaucoup pour ces astuces!
J’aimerai également utiliser ceci pour mon site en version 1.6 mais je trouve pas comment supprimer l’email de confirmation au client et le bon endroit pour indiquer les contrôles sur le HTML et les liens. Avez-vous deja effectué ceci sur les version 1.6 ?
Cordialement
Bonjour!
Les Captchas peuvent être « contournés » en utilisant des auto-solvers (en clair, un mec va farmer des captchas pour vous en échange des quelques centimes) reliés à un robot qui va spammer en continu…
Tout dépend donc de la taille du site, je doute que ces spammeurs s’amusent à payer ce genre de service pour embêter un petit site…
Sur Prestashop 1.6, il était possible de se voir « blackmailé » son adresse email avec l’option « Envoyer à un ami » des fiches produit. Le risque du formulaire de contact est le même : Si votre site envoie un email de confirmation automatique à une adresse invalide, à force, il peut se faire blacklister…
Merci, c’est super, même si je ne suis pas sujet au spam, pour le moment.
Je confirme que le captcha de Google est une plaie. Il m’est arrivé de cliquer des dizaines de fois (sans exagération) avant que mon message soit accepté. Finalement, bien souvent, je ne laisse plus de message quand je vois un captcha.
Par contre, j’ai suivi les instructions pour la traduction, mais ça ne marche pas, le texte est toujours en français, quelque soit la langue. Du coup, j’y ai mis en anglais dans le code, mais c’est dommage.
Très bon tuto comme toujours. J’ai juste un petit problème de traduction. La traduction s’affiche dans Modules >>> Contactform >>> Shop ModulesContactformShop-ModulesContactformShop au lieu de ModulesContactformShop et n’apparaît dans aucun fichier app >>> >>> Resources >>> translation
Encore merci pour vos tutos. Bonne continuation.
Bonjour,
Pour les problèmes de traductions PrestaShop, voir peut-être ces 2 billets :
https://www.webbax.ch/2020/10/15/traduire-prestashop/
https://www.webbax.ch/2019/01/17/prestashop-1-7-gerer-traductions-ep-67/
À bientôt !
Bonjour, merci pour ce Tuto , et l’ensemble de vos competences
Cela fonctionne t il avec un PrestaShop 1.6 ?
Merci encore
Bonjour,
Désolé, mais ce tutoriel est compatible uniquement avec PrestaShop 1.7.
À bientôt !
Bonjour,
je sais que c’est vieux, mais avec la 1.6, il faut éditer le fichier /comandgift_fr/controllers/front/ContactController.php
A la ligne 48 il faut insérer ce qui suit (et l’adapter bien entendu en se basant sur le message de Odanimret). Faites bien attention aux parenthèses et accolades :
Super tuto comme d’hab !
Peut on utiliser cette astuce pour bloquer des expéditeur du genre eric.jones… ?
Bonjour,
voici le code amélioré pour bloquer les @, les .fr, les .com
Encore merci Germain pour toutes tes astuces.
Merci Germain !!
Ma boutique est plus efficace grace à tes tutoriels.
Je viens de suivre ton tuto pour vider les 7 tables inutiles qui spam la bdd avec la modif du fichier IndexController.php, ma bdd est passé de 220mo à 50mo :))
Et maintenant fini les « EricJones » et autre conseiller en SEO qui demande de cliquer sur leur liens.
Franchement tu es un bon, ça me fait plaisir de suivre tes tutos!
Bonne journée à toi!
Bonjour et merci beaucoup Germain.
Pour moi, si tu le permets, ce serait une question :
Est-ce que les messages au SAV dans la BDD sont liés à d’autres données ?
Ou puis-je les supprimer directement à l’aide d’un petit module maison…
Merci d’avance.
Bonjour Marc,
Tu peux éventuellement faire du nettoyage dans la table « ps_customer_message » de la base de données, mais cela implique aussi de nettoyer d’autres tables pour faire cela vraiment proprement.
Si tu cherches à réduire la taille de la base de données PrestaShop, il faudrait plutôt faire ceci : https://www.webbax.ch/2017/06/19/prestashop-1-7-base-de-donnees-rapide/
À bientôt !
Bonjour Germain, merci pour ce fichier mais y a-t-il un tuto équivalent pour PS 1.5 ? Ou des pistes pour y arriver ?
Merci d’avance
Bonjour, je suis sur PS 1.7.8.10 et les elseif ont été transformé en if tout court. Est ce qu’on fait pareil on modifier les elseif du tutoriel en if ?
Ca va pas bugger ?
Merci par avance.
Bonjour, avez-vous une réponse à cette question ? Merci
Avant, il y avait bien des } elseif ( à la chaîne dans le contactform.php
Dans les nouvelles version, ils ont remplacé ça par des
if(test){
traitement;
return;
}
Pour les nouvelles version du contactform, il suffit donc de remplacer le elseif par un if et ajouter un return; avant la fermeture du if (avant le } qui ferme le if).
Bonjour
Merci pour ce tutoriel très intéressant.
Ceci ne résout qu’une partie du problème en ce qui me concerne.
Je suis aussi inondé de Spams dont le contenu ne contient qu’une suite de caractères. Il me semble qu’on est alors obligé de passer par un système de vérification du type google ?
Oui, le mieux est d’utiliser un module Google PrestaShop du type « reCaptcha » qui sécurise ce processus. De plus il existe une option « invisible » ce qui permet de ne pas déranger l’internaute / encombrer l’interface.
Bonjour,
Merci tout marche à la merveille, en cas de mise à jour ont perd les modifications.
J’ai ajouté un champs téléphone, mais je n’arrive pas à le trouver dans le backoffice->SAV
Comment ajouter ce champ, il ne faut pas compliquer car il ya une base de données, ya il un moyen de le concatiner avec le MESSAGE lors de l’envois/enregistrment dans la base de données.
voici mon formulaire : https://www.biomedica.tn/fr/contact
Mais tellement merci Webbax !
Je subissait du spam de @ registry . godaddy, c’était 500 à 1000 messages par jours…
J’ai mis ton code et… Terminado!
Pour répondre au commentaire au dessus à propos des elseif à la place des if, faut rien changer faut juste mettre le fichier de webbax à la place de celui d’origine (après l’avoir sauvegardé)
J’ai rajouté:
Bonjour Odanimret bien vu tes modifs et merci à Webbax pour toutes tes astuces toujours très précieuses !
J’utilise ce tips depuis des mois mais malheureusement nous faisons face à une véritable capable de spam en ce moment avec les mots clefs que tu as cité au dessus. Malgré l’utilisation de Captcha, rien n’y fait.
Serait-il possible de mettre à jour le fichier contactform ou donner directement les modifications à réaliser sur le fichier ?
Merci à Odanimret pour sa liste exhaustive.
Voici la modification du contactform.php que j’ai effectuée sur la version 4.4.2 du contacform qui utilise des if / return au lieu des elseif
Comme vous pouvez le voir, on peut commenter des lignes si on ne veut pas exclure les liens dans les mails (comme demandé par quelqu’un plus haut).
je ne sais pas par quel mystère, les caractères accentués ont été remplacés par des ‘?’ dans mon message. A corriger en reprenant les le message de Odanimret ou en récupérant le texte dans les Spams reçus.
Bonjour, j’ai ajouté votre code dans mon contactform.php, cela me donne une erreur 500 sur la page de contact.
J’utilise PrestaShop 1.7.8.11 (contact form v4.4.2)
J’ai inséré le code à la ligne 479, juste après :
Le problème vient de cette ligne, qui créé une erreur 500 (étonnant…) :
C’est bon, il y avait une parenthèse en trop dans mon code, ne pas tenir compte de mes messages précédents !
Bonjour à tous.
Comme toujours super tutoriel merci Germain !
Marche très bien sur PrestaShop V8. Mais curieusement depuis quelques jours j’ai à nouveau des spams avec des liens http qui arrivent ! Très bizarre car quand je copie le message reçu et que j’essaye de l’envoyer, j’ai bien le message d’erreur comme quoi les liens sont interdits, et pourtant… J’ai bien des messages qui arrivent. Les robots, auraient-ils réussi à déjouer le système ?
Bonjour à tous,
J’ai inséré le code de Rénato (merci a lui au passage) dans mon fichier contactform.php mais en faisant des tests ce qui doit etre considéré comme spam passe quand meme meme en ayant veillé à décommenter ce qui doit etre bloqué.
Encore bravo et merci pour vos efforts et partages
Bonjour Guillaume,
J’aimerai que seuls mes clients inscrits sur mon site (ayant un compte enregistré) puissent envoyer des messages via le formulaire de contact.
Est-ce possible ?
Bravo pour ton site et tes astuces !!!
Bonjour Webbax!
J’ai mis en place ce tuto depuis longtemps déjà et je n’ai aucun soucis. par contre, je me fais spammée sur le formulaire newsletter. de faux gens s’enregistrent, ce qui envoie un mail pour rien, sature le nombre d’envoi de mail autorisés par mon hébérgeur, et les vrais mails ne s’envoient pas… As tu une astuce pour mettre le captcha au niveau du module newsletter?
En principe je désactive ce bloc avec le champ newsletter, car il récolte uniquement du SPAM.