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 permet de placer facilement un CAPTCHA sur votre site Web PHP, ce qui vous aidera à empêcher les robots d'en abuser. Cette bibliothèque englobe API reCAPTCHA :

Pour utiliser reCAPTCHA avec PHP, vous pouvez télécharger reCAPTCHA PHP bibliothèque. Vous n'aurez besoin que d'un seul fichier (recaptchalib.php). Les autres fichiers sont les exemples, le fichier Lisez-moi et les éléments juridiques ; ils n’affectent pas les fonctionnalités.

Démarrage rapide

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 le guide de référence du plug-in PHP est disponible ci-dessous.

Côté client (comment afficher l'image CAPTCHA)

Si vous souhaitez utiliser la bibliothèque PHP pour afficher le widget reCAPTCHA, vous devez insérer cet extrait de code inclus dans la balise <form> dans lequel 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 votre clé publique d'API.

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

Dans l'exemple ci-dessus, la fonction "require_once" s'attend à ce que recaptchalib.php se trouve dans le même fichier comme 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 fichier recaptchalib.php se trouve dans le répertoire intitulé "captcha" qui est sur le même de 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 réussi le défi.
  • Si $resp->is_valid a la valeur "true", le test captcha a été effectué correctement et vous devez poursuivre le traitement du formulaire.
  • Si $resp->is_valid est défini sur "false", l'utilisateur n'a pas fourni le bon captcha. et vous devez afficher à nouveau le formulaire pour lui permettre une nouvelle tentative. Dans ce cas, $resp->error sera un code d'erreur pouvant être fourni à recaptcha_get_html. La transmission du code d'erreur entraîne l'affichage d'un message expliquant que l'utilisateur a mal saisi le texte et vous devez réessayer.
  • Notez que ce code demande la clé privée, qu'il ne faut pas confondre. à l'aide de la clé publique. Elle se trouve sur la même page que la clé publique.

    Assurez-vous également que votre formulaire est défini de manière à obtenir les variables du formulaire en utilisant $_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

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

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

    Fonction recaptcha_get_html

    La fonction recaptcha_get_html affiche le code HTML qui présente reCAPTCHA aux la utilisateur.

    recaptcha_get_html
    Paramètre
    $pubkey : chaîne. obligatoire. Votre clé publique reCAPTCHA, disponible sur la page d'inscription à l'API
    $error -- chaîne. facultatif (la valeur par défaut est "null") Si cette chaîne est définie, la zone reCAPTCHA affiche le code d'erreur données. Ce code d'erreur provient de ReCaptchaResponse->$error
    $use_ssl -- boolean. facultatif (false est la valeur par défaut) Faut-il utiliser l'API SSL ? Si vous présentez une page à l'utilisateur via SSL, assurez-vous de définir ce paramètre sur "true" pour qu'aucune boîte de dialogue d'erreur s'affichent dans le navigateur de l'utilisateur.
    Valeur renvoyée Chaîne contenant le code HTML à insérer sur la page Web.

    La fonction recaptcha_check_answer

    Une fois que l'utilisateur a rempli le formulaire HTML, y compris sa réponse pour le CAPTCHA, nous souhaitent vérifier leurs réponses lorsqu'ils envoient le formulaire à l'aide de l' fonction recaptcha_check_answer. La réponse de l'utilisateur se trouvera dans deux champs de formulaire : recaptcha_challenge_field et recaptcha_response_field. La La bibliothèque reCAPTCHA enverra une requête HTTP au serveur reCAPTCHA et vérifiera les paramètres réponse.

    recaptcha_check_answer
    Paramètre
    $privkey : chaîne. obligatoire. Votre clé privée reCAPTCHA, disponible 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 du formulaire "recaptcha_challenge_field"
    $response -- chaîne. obligatoire Valeur du champ du formulaire "recaptcha_response_field"
    Valeur renvoyée Une instance de la classe ReCaptchaResponse

    ReCaptchaResponse
    Champ
    $is_valid -- boolean reCAPTCHA pensait-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, selon votre fonction appelé.

    Mailhide

    La bibliothèque PHP reCAPTCHA inclut des liaisons pour l'API Mailhide. Ce L'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. Version _html renvoie du code HTML que vous pouvez placer directement sur votre page Web. La partie nom d'utilisateur de l'e-mail qui est transmise est tronqué et remplacé par un lien qui appelle Mailhide. La version _url donne l'URL pour décoder l'e-mail et vous laisser le soin de le placer en HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Paramètre
    $pubkey -- chaîne Clé publique Mailhide de la page d'inscription
    $privkey -- chaîne Clé privée Mailhide de la page d'inscription
    $email -- chaîne L'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>