Fini le spam sur le formulaire de contact PrestaShop, grâce à une astuce simple (ép. 131)

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é)

Télécharger

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.

BOUM !

1 seul mail par semaine - pas de publicité

18 commentaires sur “Fini le spam sur le formulaire de contact PrestaShop, grâce à une astuce simple (ép. 131)”

  1. 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.

  2. 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

  3. 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é.

    1. 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 !

  4. 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

  5. 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…

  6. 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.

  7. 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.

  8. Bonjour, merci pour ce Tuto , et l’ensemble de vos competences
    Cela fonctionne t il avec un PrestaShop 1.6 ?
    Merci encore

  9. Bonjour,

    // 01.09.21 – Webbax | TUTO 131 – bloquer le SPAM sévèrement
    } elseif(strpos($message,'href')!==false || strpos($_POST['message'],'http')!==false|| strpos($_POST['message'],'.com')!==false || strpos($_POST['message'],'.fr')!==false || strpos($_POST['message'],'@')!==false || strpos($_POST['message'],'www')!==false){
    
    if(strpos($message,'href')!==false){
    $this->context->controller->errors[] = $this->l('Le HTML n\'est pas autorisé dans le message');
    }
    if(strpos($_POST['message'],'http')!==false || strpos($_POST['message'],'.com')!==false || strpos($_POST['message'],'.fr')!==false || strpos($_POST['message'],'@')!==false || strpos($_POST['message'],'www')!==false){
    $this->context->controller->errors[] = $this->l('Les liens et les adresses mails ne sont pas autorisés dans le message');
    }
    // —
    

    voici le code amélioré pour bloquer les @, les .fr, les .com

    Encore merci Germain pour toutes tes astuces.

  10. 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!

  11. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *