Bonne année sans spams russes PrestaShop !

News, PrestaShop

Et hop c’est parti pour les voeux avec un cadeau en prime…

 
[article mis à jour le 22/04/2019]

38 Super projets PrestaShop et WordPress !

38 Nouveaux projets cette année, sans compter les personnes qui me font confiance au quotidien pour assurer un suivi et/ou une maintenance corrective/évolutive de leur site WordPress ou PrestaShop. C’est un joli chiffre et surtout je dis MERCI pour cette confiance que l’on me donne.
Je souhaite une très bonne année à mes proches, mes clients, mes collègues de longue date et tous ceux que j’ai pu croiser et avec qui j’ai pu discuter.
Je peux déjà vous annoncer que l’année qui arrive sera remplie de beaux projets PrestaShop et WordPress, avec des nouveautés qui seront visibles assez rapidement, des nouveaux modules PrestaShop, des plugins WordPress également car on m’en demande de plus en plus !
J’ai hâte de vous montrer toutes ces nouveautés mais avant : Meilleurs Voeux pour 2019 !
 

Stop au spams russes avec PrestaShop

J’ai déjà traité le sujet des spammeurs russes, chinois et d’ailleurs dans ces articles Tuto gratuit : ajouter reCAPTCHA à PrestaShop et [PrestaShop 1.7] Ajouter reCAPTCHA v2 pour éviter le spam mais les mails intempestifs reviennent à la charge on dirait selon les nombreux retours que j’ai pu avoir.
Voici donc une autre solution pour stopper les spams sous PrestaShop, peu être temporaire suivant l’adaptation des spambots,  testée sur PrestaShop 1.6 :
1) éditer le fichier www/index.php en remplaçant XXXXXXX-the-secret-key-XXXXXXXXXX par la clé secrète

<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2015 PrestaShop SA
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

// CAPTCHA - Arnaud Merigeau - contact@arnaud-merigeau.fr - https://www.arnaud-merigeau.fr
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( $post =
                                    array(
                                            'secret' => 'XXXXXXX-the-secret-key-XXXXXXXXXX',
                                            'response' => $_REQUEST['g-recaptcha-response'],
                                    )
                            ),
                    ),
    );
    if (in_array(ini_get('allow_url_fopen'), array('On', 'on', '1'))) {
        $stream = stream_context_create($opts);
    	$captcha = @json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $stream), true);
    } elseif (function_exists('curl_init')) {
		$curl = curl_init();
		curl_setopt_array($curl, array(
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
			CURLOPT_POST => 1,
			CURLOPT_POSTFIELDS => $post,
			)
		);
		$captcha = @json_decode(curl_exec($curl),true);
		curl_close($curl);
	} else {
		// buggy hoster !
		$captcha = array('error' => 'buggy hoster');
	}
    if (empty($captcha) || empty($captcha['success']) || !$captcha['success']){
            if(!empty($_SERVER['HTTP_REFERER']) && ($h = parse_url($_SERVER['HTTP_REFERER'])) && $h['host'] == $_SERVER['HTTP_HOST']) {
                sleep(5);
                die('<p>Captcha Invalide</p><a href="'.$_SERVER['HTTP_REFERER'].'"><button>Retour au formulaire</button></a>');
            }

            sleep(25);
            die('not human'.PHP_EOL/*.print_r($captcha,1)*/);
    }
}

require(dirname(__FILE__).'/config/config.inc.php');
Dispatcher::getInstance()->dispatch();

2) éditer le fichier www/themes/votre_theme/header.tpl en insérant ce script juste avant la balise </head> en remplaçant XXXXXXX-the-public-site-key-XXXXXXXXXX par la clé publique
{* CAPTCHA - Arnaud Merigeau - contact@arnaud-merigeau.fr - https://www.arnaud-merigeau.fr *}
<script>
        (function(){
        var googlecaptchasitekey = 'XXXXXXX-the-public-site-key-XXXXXXXXX';
        var trigger = function(){
                setTimeout(function(){
                    $('div.g-recaptcha').remove();
                    var $forms = $('form.contact-form-box,form#sendOrderMessage');
                    if ($forms.length > 0){
                            var captcha = $('<div class="g-recaptcha" data-sitekey="'+ googlecaptchasitekey + '">');
                            var $submit = $forms.find('#submitMessage,.button[name=submitMessage]');
                            $submit.before(captcha);
                            $submit.click(function(event){
                                    $gresponse = $forms.find('[name=g-recaptcha-response]');
                                    if ($gresponse.length == 0 || $gresponse.val().length == 0) {
                                            event.preventDefault();
                                            event.stopPropagation();
                                            return false;
                                    }
                            });
                            try {
                                    window.grecaptcha.render(captcha[0]);
                            } catch(e){};
                    }
                },1000);
        };
        $(document).ready(trigger);
        $(document).bind('ajaxComplete', trigger);
        })();
</script>
{if !isset($language_code)}{assign var="language_code" value=$lang_iso}{/if}
<script src='https://www.google.com/recaptcha/api.js?hl={$language_code}'></script>
<script>
	if ( window.history.replaceState ) {
		window.history.replaceState( null, null, window.location.href );
	}
</script>

Voici le tuto pour obtenir une clé google captcha
Important : dans ce script, il faut si besoin adapter le code selon les spécificités de votre thème :

  • var $forms = $(‘form.contact-form-box,form#sendOrderMessage’); ==> indiquer à la place de « form.contact-form-box,form#sendOrderMessage » l’id ou la class du formulaire
  • var $submit = $forms.find(‘#submitMessage,.button[name=submitMessage]’); ==> indiquer à la place de « #submitMessage,.button[name=submitMessage] » l’id ou la class du bouton de validation du formulaire

Voici les fichiers indiqués :

On remercie @Doekia sur le forum PrestaShop qui a posté ce tuto dispo ici aussi : https://shop.devcustom.net/fr/content/9-mise-en-place-captcha
 

Comment stopper les spams russes avec PrestaShop 1.7 ?

Comment stopper les spams sur le formulaire de contact de PrestaShop 1.7 ?
La réponse ave un tuto en 2 étapes :
1) Modifier le fichier www/index.php en remplaçant XXXXXXX-the-secret-key-XXXXXXXXXX par la clé secrète.

<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2015 PrestaShop SA
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

// CAPTCHA - Arnaud Merigeau - contact@arnaud-merigeau.fr - https://www.arnaud-merigeau.fr
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( $post =
                                    array(
                                            'secret' => 'XXXXXXX-the-secret-key-XXXXXXXXXX',
                                            'response' => $_REQUEST['g-recaptcha-response'],
                                    )
                            ),
                    ),
    );
    if (in_array(ini_get('allow_url_fopen'), array('On', 'on', '1'))) {
        $stream = stream_context_create($opts);
    	$captcha = @json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $stream), true);
    } elseif (function_exists('curl_init')) {
		$curl = curl_init();
		curl_setopt_array($curl, array(
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
			CURLOPT_POST => 1,
			CURLOPT_POSTFIELDS => $post,
			)
		);
		$captcha = @json_decode(curl_exec($curl),true);
		curl_close($curl);
	} else {
		// buggy hoster !
		$captcha = array('error' => 'buggy hoster');
	}
    if (empty($captcha) || empty($captcha['success']) || !$captcha['success']){
            if(!empty($_SERVER['HTTP_REFERER']) && ($h = parse_url($_SERVER['HTTP_REFERER'])) && $h['host'] == $_SERVER['HTTP_HOST']) {
                sleep(5);
                die('<p>Captcha Invalide</p><a href="'.$_SERVER['HTTP_REFERER'].'"><button>Retour au formulaire</button></a>');
            }

            sleep(25);
            die('not human'.PHP_EOL/*.print_r($captcha,1)*/);
    }
}

require(dirname(__FILE__).'/config/config.inc.php');
Dispatcher::getInstance()->dispatch();

2) Modifier le fichier www/themes/votre_theme/templates/_partials/javascript.tpl en ajoutant ce script en fin de fichier en remplaçant XXXXXXX-the-public-site-key-XXXXXXXXXX par la clé publique.
A noter que j’ai ajouté l’appel à la librairie jQuery (ligne 2) qui n’est pas forcément nécessaire si votre thème la charge déjà.
{* CAPTCHA - Arnaud Merigeau - contact@arnaud-merigeau.fr - https://www.arnaud-merigeau.fr *}
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
        (function(){
        var googlecaptchasitekey = 'XXXXXXX-the-public-site-key-XXXXXXXXX';
        var trigger = function(){
                setTimeout(function(){
                    $('div.g-recaptcha').remove();
                    var $forms = $('.contact-form form,form.contact-form-box,form#sendOrderMessage');
                    if ($forms.length > 0){
                            var captcha = $('<div class="g-recaptcha" data-sitekey="'+ googlecaptchasitekey + '">');
                            var $submit = $forms.find('.btn[name=submitMessage],#submitMessage,.button[name=submitMessage]');
                            $submit.before(captcha);
                            $submit.click(function(event){
                                    $gresponse = $forms.find('[name=g-recaptcha-response]');
                                    if ($gresponse.length == 0 || $gresponse.val().length == 0) {
                                            event.preventDefault();
                                            event.stopPropagation();
                                            return false;
                                    }
                            });
                            try {
                                    window.grecaptcha.render(captcha[0]);
                            } catch(e){};
                    }
                },1000);
        };
        $(document).ready(trigger);
        $(document).bind('ajaxComplete', trigger);
        })();
</script>
<script src='https://www.google.com/recaptcha/api.js?hl={$language.language_code}'></script>
<script>
	if ( window.history.replaceState ) {
		window.history.replaceState( null, null, window.location.href );
	}
</script>

Comment obtenir une clé Google captcha ? Rendez-vous sur cette page.
Enfin, adaptez le script selon les spécificités de votre thème :

  • var $forms = var $forms = $(‘.contact-form form,form.contact-form-box,form#sendOrderMessage’); ==> indiquer le sélecteur CSS du formulaire de contact
  • var $submit = $forms.find(‘.btn[name=submitMessage],#submitMessage,.button[name=submitMessage]’); ==> indiquer le sélecteur CSS du bouton de validation du formulaire

Voici les fichiers indiqués :

 
J’espère que ce tuto pour stopper les spams PrestaShop vous sera utiles pour la nouvelle année 😀
 

21 commentaires sur “Bonne année sans spams russes PrestaShop !

  1. Bonjour Arnaud,
    Tout d’abord je vous souhaite une excellente année 2019 avec de beaux projets, et merci pour votre partage. Concernant le tuto, ou doit-on coller le script dans le fichier header.tpl, vous précisez avant la balise. Au tout début du fichier ou avant la balise head ????

    1. Bonjour Emmanuel,
      Bonne année et meilleurs voeux également 🙂
      Je viens de compléter l’article avec le nom de la balise qui m’avait échappé.
      C’est bien avant la balise qu’il faut insérer le script.
      A bientôt !

    2. Bonjour Arnaud,
      Une dernière petite question, nous n’avons pas besoin d’installer un module par le fait, sinon cela fait doublon ? Le captcha n’apparait pas dans le formulaire de contact, est ce normal ou doit on intégrer un petit script avec la balise « submit » ?
      Merci pour le partage et votre réactivité.
      Cordialement
      Emmanuel

  2. Bonjour,
    Merci pour le partage et pour essayer de trouver une solution. Personnelement cette mise à jour n’a pas permis de régler le problème qui tend même à s’empirer … Est-ce cette soltuion a été efficace pour quelqu’un ? Merci pour vos retours.

    1. Bonjour Robin,
      La solution est déployé chez 3 de mes clients et depuis plus aucun spams.
      Essayez de renommer également l’url de la page contact.

  3. Bonjour et bravo pour vos posts qui nous aide tous beaucoup
    une petite question : comment connaitre l’id ou la class de son formulaire ? pour le script
    Merci
    Bon Week End

    1. Bonjour Sébastien,
      Dans votre navigateur, sur la page du formulaire de contact, clic droit « inspecter l’élément » puis repérer la balise html du formulaire et sa class ou id.
      Bonne journée 🙂

    1. Mais cela doit bien générer un captcha sur le contact ? J’avais ton module, si je l’enlève et que je suis la méthode ci-dessus j’ai aucun captcha. Si j’utilise ton module + la méthode du dessus alors j’ai 2 captcha. Une idée ? (Presta 1.6)

  4. Bonjour Arnaud,
    Cette méthode s’ajoute à l’installation du module captcha ou c’est une tout autre méthode qui nécessite la désinstallation du module ?
    Merci

  5. Bonjour Arnaud,
    Je renouvelle ma question qui n’est pas « passée »…
    Doit-on enlever le module reCAPTCHA ou cette nouvelle méthode est en complément ?
    Merci

  6. Bonjour,
    @Pascal @Matthieu, j’ai mis à jour le code et je viens de tester à nouveau, c’est ok.
    Avec ce tuto, il n’y a pas besoin d’avoir un autre module.
    Bon courage 🙂

    1. Bonjour Bertiaux,
      Après avoir traiter le tuto antispam de l’article, avez-vous bien désactiver tout module antispam ?
      Si oui, videz bien le cache PrestaShop.

  7. Bonjour,
    C’est bien votre tuto comment stopper les spams russes sur son site internet prestashop 1.6.
    Mais on fait comment quand on est pas un spécialiste ou un développeur informatique ?
    Car là c’est un peu du chinois.
    Merci d’avance.
    Cordialement.

    1. Bonjour Mathias,
      Je donne des astuces et des tutos aussi cela demande à passer un peu de temps si on est novice.
      Je peux aussi installer le captcha si vous voulez, contactez-moi directement 🙂

Laisser un commentaire

Consultez les autres articles