Installez le nouveau Captcha de Google sur votre site en PHP

5 décembre 2014 · 3 min de lecture

CAPTCHA est un service gratuit qui permet de protéger les sites web contre le spam. Il est utilisé dans les formulaires pour éviter les soumissions automatisées par des robots malveillants. Il s’agit en général de recopier un mot déformé dans une image :

reCAPTCHA old API

Google propose une nouvelle version améliorée parue le 03 décembre 2014 (voir article sur son blog officiel). Elle simplifie l’utilisation pour un humain jusqu’à cliquer sur une simple case à cocher :

reCAPTCHA new API

Voyons comment intégrer ce service dans votre site internet.

Pré-requis

Pour le moment Google propose une librairie en PHP uniquement. Mais le projet étant open-source d’autres langages seront ajoutés rapidement.

Considérons que vous avez un simple formulaire en PHP/HTML. Nommons le fichier test-captcha.php :

<html>

 <head>
  <title>Ma page</title>
 </head>

 <body>
  <form action="test-captcha.php" method="POST">
   <input type="submit" value="Envoyer">
  </form>
 </body>

</html>

Installation

Vous devez tout d’abord enregistrer votre nom de domaine pour obtenir une paire de clés API :

  • une clé publique : ou “clé du site”, à intégrer dans votre code HTML;
  • une clé privée : ou “clé secrète”, à ne pas communiquer ! utilisée pour toute communication entre votre site et Google.

Cette paire de clés est valable pour votre domaine et vos sous-domaines :

Ajout de l’API

Dans notre page de démonstration test-captcha.php, collez cet extrait avant la balise fermante </head> :

<script src="https://www.google.com/recaptcha/api.js"></script>

Ajout du CAPTCHA

Un peut de PHP maintenant. En début de page, ajoutons les clés :

<?php
$siteKey = 'XXXX'; // votre clé publique
$secret = 'YYYY'; // votre clé privée
?>

Il faut bien sûr remplacer les X et les Y par vos clés publique et privée.

Pour faire apparaitre le widget, collez le code suivant entre les balises <form> et </form> :

<div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>

Faites un essai dans votre navigateur, normalement le widget ReCaptcha s’affiche.

Vérification de la validité du Captcha

Google propose une librairie PHP sur GitHub.
Enregistrez le fichier recaptchalib.php dans le même dossier que votre page PHP.

Pour inclure ce fichier, ajoutez tout en haut du fichier test-captcha.php :

require 'recaptchalib.php';

Nous pouvons maintenant vérifier, après validation du formulaire, si on a affaire à un robot ou à un humain :

<?php
$reCaptcha = new ReCaptcha($secret);
if(isset($_POST["g-recaptcha-response"])) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
        );
    if ($resp != null && $resp->success) {echo "CAPTCHA OK";}
    else {echo "CAPTCHA incorrect";}
    }
?>

Page finale

Voici le script complet test-captcha.php :

<?php
require 'recaptchalib.php';
$siteKey = 'XXXX'; // votre clé publique
$secret = 'YYYY'; // votre clé privée
?>
<html>

 <head>
  <title>Ma page</title>
  <script src="https://www.google.com/recaptcha/api.js"></script>
 </head>

 <body>
<?php
$reCaptcha = new ReCaptcha($secret);
if(isset($_POST["g-recaptcha-response"])) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
        );
    if ($resp != null && $resp->success) {echo "OK";}
    else {echo "CAPTCHA incorrect";}
    }
?>     
  <form action="test-captcha.php" method="POST">
   <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>
   <input type="submit" value="Envoyer">
  </form>
 </body>

</html>

Références

Documentation officielle de Google en anglais
CAPTCHA sur Wikipédia

PARTAGER

A LIRE EGALEMENT