Utiliser reCAPTCHA avec PHP

Important: La version 1.0 de l'API reCAPTCHA n'est plus compatible. Veuillez passer à la version 2.0. En savoir plus

La bibliothèque PHP reCAPTCHA offre un moyen simple de placer un CAPTCHA sur votre site Web PHP, ce qui vous aide à empêcher les robots d'en abuser. La bibliothèque encapsule l'API reCAPTCHA.

Pour utiliser reCAPTCHA avec PHP, vous pouvez télécharger la bibliothèque PHP reCAPTCHA. Vous n'aurez besoin que d'un seul fichier à partir de là (recaptchalib.php). Les autres fichiers sont des exemples, des fichiers Lisez-moi et des éléments juridiques. Ils n'ont aucune incidence sur les fonctionnalités.

Quick Start

Une fois que vous vous êtes inscrit pour obtenir vos clés API, vous trouverez ci-dessous des instructions de base pour installer reCAPTCHA sur votre site. Un guide de référence complet sur le plug-in PHP est disponible ci-dessous.

Côté client (comment faire apparaître l'image CAPTCHA)

Si vous souhaitez utiliser la bibliothèque PHP pour afficher le widget reCAPTCHA, vous devez insérer cet extrait de code dans l'élément <form> où le widget reCAPTCHA sera placé:

  require_once('recaptchalib.php');
  $publickey = "your_public_key"; // you got this from the signup page
  echo recaptcha_get_html($publickey);

Avec le code, votre formulaire peut se présenter comme suit:

  <html>
    <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
      <!-- your HTML content -->

      <form method="post" action="verify.php">
        <?php
          require_once('recaptchalib.php');
          $publickey = "your_public_key"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>

      <!-- more of your HTML content -->
    </body>
  </html>

N'oubliez pas de définir $publickey en remplaçant your_public_key par la clé publique de votre API.

Notez que la valeur de l'attribut "action" est "verify.php". Maintenant, Verify.php est le fichier de destination dans lequel les valeurs de ce formulaire sont envoyées. Vous aurez donc besoin d’un fichier verify.php au même emplacement que le client html.

La fonction required_once dans l'exemple ci-dessus s'attend à ce que recaptchalib.php se trouve dans le même répertoire que votre fichier de formulaire. S'il se trouve dans un autre répertoire, vous devez l'associer de manière appropriée. Par exemple, si votre recaptchalib.php se trouve dans le répertoire appelé "captcha" qui se trouve au même niveau que votre fichier de formulaire, la fonction se présente comme suit : require_once('captcha/recaptchalib.php').

Côté serveur (comment vérifier si l'utilisateur a saisi la bonne réponse)

Le code suivant doit être placé en haut du fichier Verify.php:

  <?php
  require_once('recaptchalib.php');
  $privatekey = "your_private_key";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    // Your code here to handle a successful verification
  }
  ?>

Dans le code ci-dessus :

  • recaptcha_check_answer renvoie un objet qui indique si l'utilisateur a réussi le test.
  • Si $resp->is_valid est "true", cela signifie que le test captcha a été correctement effectué et que vous devez poursuivre le traitement du formulaire.
  • Si $resp->is_valid est défini sur "false", l'utilisateur n'a pas fourni le bon texte captcha. Vous devez à nouveau afficher le formulaire pour lui permettre à nouveau d'essayer. Dans ce cas, $resp->error est un code d'erreur qui peut être fourni à recaptcha_get_html. La transmission du code d'erreur entraîne l'affichage d'un message dans la commande reCAPTCHA expliquant que l'utilisateur a mal saisi le texte et doit réessayer.
  • Notez que ce code demande la clé privée, qui ne doit pas être confondue avec la clé publique. Vous l'obtenez sur la même page que la clé publique.

    Assurez-vous également que votre formulaire est configuré pour obtenir les variables de formulaire à l'aide de $_POST, au lieu de $_REQUEST, et que le formulaire lui-même utilise la méthode POST.

    Et voilà ! reCAPTCHA devrait maintenant fonctionner sur votre site.

    Documentation complémentaire

  • Personnalisation de l'apparence
  • Conseils et consignes
  • Dépannage
  • Guide de référence du plug-in PHP

    Vous trouverez ci-dessous la liste complète de toutes les méthodes du plug-in reCAPTCHA PHP.

    Fonction recaptcha_get_html

    La fonction recaptcha_get_html affiche le code HTML qui présente reCAPTCHA à l'utilisateur.

    recaptcha_get_html
    Paramètres
    $pubkey : chaîne obligatoire. Votre clé publique reCAPTCHA obtenue à partir de la page d'inscription de l'API
    $error -- chaîne. optional (null est la valeur par défaut) Si cette chaîne est définie, la zone reCAPTCHA affiche le code d'erreur fourni. Ce code d'erreur provient de ReCaptchaResponse->$error.
    $use_ssl -- booléen. Facultatif (la valeur "false" est la valeur par défaut). Faut-il utiliser l'API basée sur SSL ? Si vous présentez une page à l'utilisateur via SSL, assurez-vous de définir cette option sur "true" afin qu'aucune boîte de dialogue d'erreur ne s'affiche dans le navigateur de l'utilisateur.
    Valeur renvoyée Chaîne qui contient le code HTML à placer sur la page Web.

    Fonction recaptcha_check_answer

    Une fois que l'utilisateur a rempli le formulaire HTML, y compris sa réponse au captcha, nous souhaitons vérifier sa réponse lorsqu'il envoie le formulaire à l'aide de la fonction recaptcha_check_answer. La réponse de l'utilisateur se présentera dans deux champs de formulaire : recaptcha_challenge_field et recaptcha_response_field. La bibliothèque reCAPTCHA envoie une requête HTTP au serveur reCAPTCHA et vérifie la réponse de l'utilisateur.

    recaptcha_check_answer
    Paramètres
    $privkey : chaîne obligatoire. Votre clé privée reCAPTCHA obtenue sur la page d'inscription de l'API
    $remoteip -- chaîne. obligatoire. Adresse IP de l'utilisateur, au format 192.168.0.1
    $challenge -- chaîne. obligatoire.
    Valeur du champ recaptcha_challenge_field dans le formulaire
    $response -- une chaîne. obligatoire Valeur du champ recaptcha_response_field du formulaire
    Valeur renvoyée Instance de la classe ReCaptchaResponse

    ReCaptchaResponse
    Champ
    $is_valid -- booléen Le reCAPTCHA considère-t-il que la réponse était valide ?
    $error -- chaîne Si la réponse n'était pas valide, quel était le problème ? Ce code d'erreur peut être utilisé dans recaptcha_get_html.
    Valeur renvoyée URL HTML ou brute permettant de décoder l'adresse e-mail, en fonction de la fonction que vous avez appelée.

    Mailhide

    La bibliothèque PHP reCAPTCHA inclut des liaisons pour l'API Mailhide. Cette API vous permet d'encapsuler un e-mail dans un reCAPTCHA pour empêcher les spammeurs de le voir : examen...@example.com.

    La partie Mailhide de la bibliothèque PHP nécessite le module PHP mcrypt.

    L'API Mailhide comprend deux fonctions : recaptcha_mailhide_html et recaptcha_mailhide_url. Les fonctions ont les mêmes paramètres. La version _html renvoie du code HTML qui peut être placé directement sur votre page Web. La partie de l'e-mail transmise au nom d'utilisateur est tronquée et remplacée par un lien qui appelle Mailhide. La version _url vous donne l'URL pour décoder l'e-mail et vous laisse le soin de placer l'e-mail en HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Paramètres
    $pubkey -- chaîne La clé publique Mailhide figurant sur la page d'inscription
    $privkey -- chaîne La clé privée Mailhide figurant sur la page d'inscription
    $email -- chaîne Adresse e-mail que vous souhaitez masquer.

    L'exemple suivant montre comment utiliser Mailhide:

    <html><body>
    <?
    require_once ("recaptchalib.php");
    // get a key at http://www.google.com/recaptcha/mailhide/apikey
    $mailhide_pubkey = '';
    $mailhide_privkey = '';
    ?>
    The Mailhide encoding of example@example.com is
    <?
    echo recaptcha_mailhide_html ($mailhide_pubkey,
                                  $mailhide_privkey,
                                  "example@example.com");
    ?>.
    <br>
    The url for the email is:
    <?
    echo recaptcha_mailhide_url ($mailhide_pubkey,
                                 $mailhide_privkey,
                                 "example@example.com");
    ?>
    <br>
    </body></html>