- Team Ever - https://www.team-ever.com -

Prestashop : bloquer les spammeurs sur le SAV

Quoi de pire pour un e-commerçant que de se voir spammer par des emails en provenance de Chine ? Plusieurs boutiques sont impactées par ce phénomène, qui en plus d’être très embêtant, risque de vous ralentir le serveur, et si vous effectuez des redirections de mail vers une boite de type orange ou autre, vous risquez carrément de finir en spam avec votre nom de domaine.

Ces spammeurs, en général en provenance de Chine (mais pas toujours), sont des robots cherchant généralement à faire tomber votre serveur mail. La structure de Prestashop étant bien connue (en raison de la popularité de l’outil), il est évident que les robots savent très exactement où taper pour que cela fasse mal. Bien souvent, ce sont des adresses emails en qq.com.

Le tutoriel ici correspond à trois méthodes que vous pouvez d’emblée mettre en place sur votre site, cependant la sécurité et les filtres anti-spams doivent être gérés depuis le serveur, non depuis un site. De nombreux outils gratuits existent côté serveur, comme Spam Assassin, IPTable ou Fail2Ban. Si votre hébergeur vous affirme le contraire, il s’expose à des soucis en terme de blacklistage et de performances.

Trois méthodes donc, qui sont même compatibles les unes avec les autres. La première consiste en un réglage dans votre back-office, la seconde (plus sévère) se passe dans votre htaccess, et doit donc être réalisée avec précaution, la troisième (demandant d’avoir une clé Google et savoir comment modifier son thème) ajoute un recaptcha sur votre site.

Ce tuto présente trois méthodes, mais la Team vous a quand même développé un module de ReCaptcha Google que vous pouvez retrouver en cliquant ici

Et si vous subissez le spam des petits rigolos qui utilisent des adresses email ou des noms de domaine en tant que nom ou prénom lors de l’inscription utilisateur, ce module supprime les inscriptions spam correspondant à ces critères, en plus de bloquer les emails « jetables ».

Les deux sont gratuits (comme ça vous pourrez pas dire qu’on vous aide pas ! 😀 ) Nous avons également un module (payant celui-ci) qui permet de bloquer un client dans la messagerie Prestashop, en verrouillant son adresse email ou son adresse IP

Bloquer les pays depuis Prestashop

Prestashop dispose d’un outil malheureusement trop peu utilisé par les commerçants, nommé GeoIp.

Je demande régulièrement aux e-commerçants quels sont les endroits où ils souhaitent livrer, pas forcément pour des conditions tarifaires, mais également pour des raisons de sécurité. Si vous ne livrez pas en Chine, quel intérêt ont les chinois de pouvoir accéder à votre site ? Et si d’aventure vous commencez à recevoir des visites de la part de la Russie, alors que votre site n’est ni référencé chez eux, ni traduit, et que vous ne livrez même pas dans ce pays, inutile de vous réjouir, ce trafic inopiné est on ne peut plus louche…

Prestashop vous permet de n’autoriser l’accès à votre site qu’aux pays dans lesquels vous livrez, à savoir les pays activés dans le back-office. Il s’agit donc d’une restriction qui affiche une page « restricted-country.tpl » de votre thème (fichier au passage plutôt complexe à modifier).

a/ Télécharger GeoIp

Pour télécharger GeoIp, rendez-vous dans « International » puis « Localisation » sous Prestashop 1.7, dans la version 1.6 le réglage se trouve sous « Préférences » puis « Géolocalisation ».

Un lien vous proposera de télécharger un fichier gzip à cette URL : http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz. Dézippez-le avant de vous connecter au FTP. Comme vous le précise Prestashop, placez le fichier dans /tools/geoip (envoyez bien fichier dézippé, sinon cela ne fonctionnera pas)

Prestashop : bloquer les spammeurs sur le SAV 1
Prestashop : bloquer les spammeurs sur le SAV 2
Prestashop : bloquer les spammeurs sur le SAV 3

b/ Activation de la restriction

A présent vous pouvez activer la géolocalisation par IP. Cochez donc la case, et précisez en-dessous ce que peuvent faire les pays restreints. L’idéal est de restreindre complètement les pays non autorisés, avec les réglages « Les visiteurs ne peuvent pas voir votre catalogue ».

Prestashop : bloquer les spammeurs sur le SAV 4

Sélectionnez en-dessous les pays autorisés en cochant les cases associées. Enregistrez, vous avez terminé !

L’effet est immédiat, pensez toutefois à vider votre cache, et si vous avez des amis qui se trouvent à l’étranger, demandez-leur de tester.

Bloquer des plages IP depuis le htaccess

Très restrictive, cette méthode a toutefois le désavantage de ralentir un peu votre site (d’où le fait que je précise une fois de plus que le blacklistage devrait être effectué depuis le serveur, par votre hébergeur, et non depuis le site).

Dans tout site utilisant Apache (pas l’indien, le module serveur), se trouve un fichier .htaccess, généralement à la racine de votre site. Celui-ci gère par exemple la réécriture des URL. Autant vous prévenir : une mauvaise manipulation bloquera votre site. Si cela vous arrive, pensez systématiquement à avoir une sauvegarde de ce fichier.

Une fois sauvegardé, éditez-le, et tout en bas de ce fichier, ajoutez ces règles de blocage par plages IP :

Télécharger le fichier de blocage par IP

La syntaxe est à ajouter à la fin de votre fichier htaccess à la racine de votre site.

Reconnaissez que la liste est plutôt longue ! Le résultat est immédiat, sans équivoque, et bannit toute personne dont l’IP se trouve dans les plages listées ci-dessus. Attention donc à deux choses : le ralentissement dû à une surcharge Apache, et également le blocage radical et sans équivoque de ces plages IP. Conservez toujours une sauvegarde du fichier. Il est tout de même préférable d’utiliser GeoIp Et un Captcha Google à ajouter sur votre Prestashop.

L’ajout d’un recaptcha

Le recaptcha vous demandera d’avoir à disposition un code Google, à créer à cette adresse :

https://www.google.com/recaptcha/admin

Et le code gracieusement fourni depuis ce snippet par Doekia (rendons à César 🙂 ) permet d’insérer cela via votre header.tpl !

Prestashop : bloquer les spammeurs sur le SAV 5

Voici le snippet en question :

<!-- Google ReCaptcha on contact form -->
                <script>
                        var googlecaptchasitekey = 'XXXXXXX-the-public-site-key-XXXXXXXXX'; /* TODO: tune this https://www.google.com/recaptcha/admin */
                        $(document).ready(function(){
                                var $forms = $('form.contact-form-box');
                                if ($forms.length > 0){
                                        var captcha = $('<div class="g-recaptcha" data-sitekey="'+ googlecaptchasitekey + '">');
                                        var $submit = $forms.find('#submitMessage');
                                        $submit.before(captcha);
                                        $submit.click(function(event){
                                                if ($forms.find('#g-recaptcha-response').val().length == 0) {
                                                        event.preventDefault();
                                                        event.stopPropagation();
                                                        return false;
                                                }
                                        });
                                }
                        });
                </script>
                <script src='https://www.google.com/recaptcha/api.js?hl={$language_code}'></script>
                {*
                      TODO: cut/paste into index.php (first after comments)
                      if (isset($_REQUEST['submitMessage'])){
                                if (empty($_REQUEST['g-recaptcha-response'])){
                                        sleep(25);
                                        die('not human');
                                }
                                $opts = array('http' =>
                                                array(
                                                        'method'  => 'POST',
                                                        'header'  => 'Content-type: application/x-www-form-urlencoded',
                                                        'content' => http_build_query(
                                                                array(
                                                                        'secret' => 'XXXXXXX-the-secret-key-XXXXXXXXXX', /* TODO: tune this https://www.google.com/recaptcha/admin */
                                                                        'response' => $_REQUEST['g-recaptcha-response'],
                                                                )
                                                        ),
                                                ),
                                );
                                $stream = stream_context_create($opts);
                                $captcha = @json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $stream), true);
                                if (empty($captcha) || empty($captcha['success']) || !$captcha['success']){
                                        sleep(25);
                                        die('not human'.PHP_EOL.print_r($captcha,1));
                                }
                        }
                *}
                <!-- /Google ReCaptcha -->

Il y a un bouton « Buy me a coffee » sur la page du snippet partagés, n’hésitez pas 😉

Ou si vous avez du mal à insérer un code ReCaptcha de Google, regardez par ici, la Team a développé un module spécialement dédié à cet effet : EverPsCaptcha !

Le cas de l’hébergeur

Fail2Ban, Spam Assassin et bien d’autres outils depuis un serveur permettent d’automatiser des blacklists et d’éviter d’avoir ce genre de soucis.

Avec la Team nous utilisons pas moins de trois outils directement sur nos serveurs, ce qui permet d’en faire profiter toute personne hébergée chez nous. Si un site a un souci, autant partir du principe que d’autres peuvent avoir le même (d’où ce tutoriel par exemple).

Voici les questions donc à poser à votre hébergeur :