Récément j’ai du installer Recaptcha V3 sur une ancienne version d’eZpublish (v4). Voici comment faire simplement.
Attention cette méthode n’est pas optimale car je modifie le code en dur sachant que la version du site ne sera jamais mise à jour.
1- Gérérer les clés sur Google reCAPTCHA
Premièrement aller sur le site reCAPTCHA et générer les clés pour le site désiré en prenant soin de choisir la V3.
2- Ajouter le javascript dans les templates eZ Publish
Ajouter ce petit bout de de code dans le code HTML du site.
{literal} <script src="https://www.google.com/recaptcha/api.js?render=CLE_PUBLIQUE_DU_SITE"></script> <script> grecaptcha.ready(function () { grecaptcha.execute('CLE_PUBLIQUE_DU_SITE', { action: 'contact' }).then(function (token) { var recaptchaResponse = document.getElementById('recaptchaResponse'); recaptchaResponse.value = token; }); }); </script> {/literal}
Dans le template du formulaire ajouter également ce champ input
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
3- Modifier le fichier PHP de traitement de contact
Modifier le fichier kernel/content/collectedinformation.php après le bloc (environ l149)
// Check every attribute if it's supposed to collect information $attributeDataBaseName = 'ContentObjectAttribute'; $unvalidatedAttributes = array(); $canCollect = true; $requireFixup = false;
et ajouter :
/** Recaptcha V3 */ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['recaptcha_response'])) { $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'; $recaptcha_secret = 'CLE_PRIVEE_DU_SITE'; $recaptcha_response = $_POST['recaptcha_response']; $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response); $recaptcha = json_decode($recaptcha); if ($recaptcha->score >= 0.5) { // OK. On laisse la suite du code se dérouler } else { // Risque de spam -> on bloque echo "Votre IP peut être considérée comme un SPAM. Merci de nous envoyer un email via notre adresse email directement."; echo "<br/><br/><br/><br/>"; exit(); } } /* Fin recaptcha V3 */
Comme cité plus haut, cette méthode n’est pas optimale.
4 Responses
Salut,
Avant tout merci pour ton partage, cela fonctionne pour mon test en effet, par contre a tu pu faire en sorte que le reCAPTCHA soit aussi contrôlé au moment du control de remplissage?
Hello Eddy,
Non, de ce que je me souviens c’est juste à la validation en backend.
Bonjour,
dans l’étape 2 vous avez indiqué
« Ajouter ce petit bout de de code dans le code HTML du site. »
pouvez-vous m’indiquer dans quelle page?
Bonjour, j’ai peur que ce code ne soit plus à jour.