Jump to content

TUTO ANTI SPAM CONTACT - Mise en place d'un Captcha google en 5 minutes


Recommended Posts

Bonjour,

Ces jours ci, plusieurs clients m'ont demandé de sécuriser leurs formulaires de contacts,

et il parait que certains font des devis énormes pour ajouter un simple captcha..


Je partage la marche à suivre que j'ai trouvé sur d'autres forums, je ne suis pas l'auteur de ce code, je l'ai juste un peu personnalisé.
En espérant que cela puisse aider le max de personnes.
Peut etre que je ferais un module à l'occasion, mais pas le temps en ce moment.

 

1/ Inscrivez votre site sur : https://www.google.com/recaptcha/admin

Choisissez reCAPTCHA V2 (le 1er choix), puis saisissez votre nom de domaine ( 1 site par ligne)

Vous aurez ensuite la "clé public" ou "clé du site" (à placer dans le header de votre theme)

et la clé secrète (à placer côté serveur, dans le ContactController.php)

 

2/ Créez ou modifier ce fichier : /override/controller/ContactController.php

afin de modifier la fonction postProcess, comme ci-dessous.
N'oubliez pas de modifier le $secret_key

<?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 [email protected] 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 <[email protected]>
*  @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
*/

class ContactController extends ContactControllerCore
{ 
    public function postProcess()
    {
        if (Tools::isSubmit('submitMessage')) {		
			$secret_key="YOUR SECRET KEY"; /* TODO: tune this https://www.google.com/recaptcha/admin */
			$human=1;
			if (empty($_REQUEST['g-recaptcha-response'])){
					sleep(25);
					die('not human');
					$human=0;
			}
			$opts = array('http' =>
							array(
									'method'  => 'POST',
									'header'  => 'Content-type: application/x-www-form-urlencoded',
									'content' => http_build_query(
											array(
													'secret' => $secret_key, /* 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));
					die('not human');
					$human=0;
			}
			
			if($human==1){
				parent::postProcess();
			}
        }
    }
}

 

 

3/ Modifier votre fichier header.tpl dans votre theme, en rajoutant simplement juste avant le </head>, et en modifiant la variable de la key "YOUR-PUBLIC-KEY" .
Pour la 1.7, il faut aller dans le theme puis layout, puis modifier layout-both-columns.tpl .

{if $page_name=="contact"} 
{literal}
<script>
var googlecaptchasitekey = 'YOUR-PUBLIC-KEY'; /* 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>
{/literal}
{/if}

Si votre formulaire de contact n'a pas la class="contact-form-box", alors il faudra adapter mon code.


Attention pour la 1.7, le page_name est différent. Il faut marquer :

{if $page.page_name=="contact"}

... 

{/if}

 

Voilà c'est tout, votre formulaire devrait être sécurisé, si vous avez bien renseigné les 2 clés.

Il doit surement exister d'autres techniques.
Je partage juste ma méthode en espérant pouvoir aider.

 

 

 

ContactController.php

Edited by Christophe Boix (see edit history)
Link to comment
Share on other sites

Mille excuses, mais je ne peux pas admettre que tu présente une solution - avec la publicité pour tes compétences alors que tu n'es pas l'auteur d'une seule ligne de cette solution.

D'autant que dans ton copiage/collage tu as oublié des éléments

 

-1000

  • Like 1
Link to comment
Share on other sites

Bonjour,

Et donc parce que je ne suis pas l'auteur du "code original", je ne peux pas partager une solution facile à mettre en place ?

Comme je disais dans mon post, je partage juste la marche à suivre pour que le soucis de spam soit réglé en 5 minutes.

Moi ce que je trouve honteux, ce sont les gens qui vendent ce genre de prestation, donc si ce post peut permettre à des gens de fixer leur problème facilement, tant mieux.

 

 

 

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...