Christophe Boix Posted March 2, 2018 Share Posted March 2, 2018 (edited) 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 March 4, 2018 by Christophe Boix (see edit history) Link to comment Share on other sites More sharing options...
doekia Posted March 2, 2018 Share Posted March 2, 2018 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 1 Link to comment Share on other sites More sharing options...
Eolia Posted March 2, 2018 Share Posted March 2, 2018 Effectivement c'est tout juste honteux ! Leseul code original OFFERT par @doekia est disponible ici http://area51.enter-solutions.com/snippets/74 Et effectivement votre copie du code est incomplète. Link to comment Share on other sites More sharing options...
Christophe Boix Posted March 4, 2018 Author Share Posted March 4, 2018 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. 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now