Usa reCAPTCHA con PHP

Importante: Ya no se admite la versión 1.0 de la API de reCAPTCHA. Actualiza a la versión 2.0. Más información

La biblioteca PHP de reCAPTCHA proporciona una forma sencilla de colocar un CAPTCHA en en tu sitio web de PHP para evitar que los bots lo abusen. La biblioteca incluye API de reCAPTCHA:

Para usar reCAPTCHA con PHP, puedes descargar reCAPTCHA PHP biblioteca. Solo necesitarás un archivo (recaptchalib.php). Los otros archivos son ejemplos, Léame y asuntos legales, no afectan la funcionalidad.

Inicio rápido

Una vez que te registres para obtener tus claves de API, sigue estas instrucciones básicas para instalar reCAPTCHA en tu sitio. Un encontrarás una guía de referencia del complemento de PHP a continuación.

Del cliente (cómo hacer que aparezca la imagen CAPTCHA)

Si quieres usar la biblioteca PHP para mostrar el widget de reCAPTCHA, deberás insertar este fragmento de código dentro de la etiqueta <form> en el que se almacenará el widget de reCAPTCHA colocado:

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

Con el código, tu formulario podría verse de la siguiente manera:

  <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>

Recuerda reemplazar your_public_key por para configurar $publickey: la clave pública de tu API.

Ten en cuenta que el valor de la "acción" es "verify.php". Ahora, verify.php es el el archivo de destino al que se envían los valores de este formulario. Así que necesitarás un archivo Verify.php en la misma ubicación que el código HTML del cliente.

La función required_once del ejemplo anterior espera que recaptchalib.php esté en el mismo como archivo del formulario. Si se encuentra en otro directorio, debes vincularlo correctamente. Por ejemplo, si tu recaptchalib.php está en el directorio llamado “captcha”. que se encuentran en la misma a nivel del archivo de formulario, la función se verá de la siguiente manera: require_once('captcha/recaptchalib.php')

En el servidor (cómo probar si el usuario ingresó la respuesta correcta)

Debes colocar el siguiente código en la parte superior del archivo 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
  }
  ?>

En el código anterior:

  • recaptcha_check_answer devuelve un objeto que indica si el usuario completó correctamente el desafío.
  • Si $resp->is_valid es verdadero, el desafío del captcha se completó correctamente y debes continuar con el procesamiento del formulario.
  • Si $resp->is_valid es falso, el usuario no pudo proporcionar el captcha correcto texto y debes volver a mostrar el formulario para permitirles que vuelvan a intentarlo. En este caso, $resp->error será un código de error que se puede proporcionar a recaptcha_get_html. Pasar el código de error hace que el control de reCAPTCHA muestre un mensaje en el que se explique que el usuario ingresó el texto de forma incorrecta y debería volver a intentarlo.
  • Ten en cuenta que este código solicita la clave privada, que no debe confundirse. con la clave pública. Obtienes eso de la misma página que la clave pública.

    Además, asegúrate de que tu formulario esté configurado para obtener las variables del formulario usando $_POST, en lugar de $_REQUEST y que el formulario use el método POST.

    Eso es todo. reCAPTCHA debería funcionar en tu sitio.

    Lecturas adicionales

  • Cómo personalizar la apariencia
  • Sugerencias y lineamientos
  • Solución de problemas
  • Guía de referencia del complemento de PHP

    A continuación, se muestra una lista completa de todos los métodos del complemento reCAPTCHA para PHP.

    La función recaptcha_get_html

    La función recaptcha_get_html muestra el código HTML que presenta reCAPTCHA a el usuario.

    recaptcha_get_html
    Parámetro
    $pubkey: cadena. como en los productos necesarios. Tu clave pública de reCAPTCHA, de la página de registro de la API
    $error -- string. opcional (el valor predeterminado es nulo) Si se establece esta cadena, el área de reCAPTCHA mostrará el código de error. dado. Este código de error proviene de ReCaptchaResponse->$error
    $use_ssl -- boolean. opcional (el valor predeterminado es falso) ¿Debería usarse la API basada en SSL? Si estás mostrando una página al usuario a través de SSL, asegúrate de configurarlo como verdadero para que no se muestre aparecer en el navegador del usuario.
    Valor que se muestra Es una cadena que contiene el código HTML para colocar en la página web.

    La función recaptcha_check_answer

    Después de que el usuario completa el formulario HTML, incluida su respuesta al CAPTCHA, desean verificar su respuesta cuando envíen el formulario con el función recaptcha_check_answer. La respuesta del usuario estará en dos campos de formulario: recaptcha_challenge_field y recaptcha_response_field. El La biblioteca de reCAPTCHA realizará una solicitud HTTP al servidor reCAPTCHA y verificará la una respuesta en particular.

    recaptcha_check_answer
    Parámetro
    $privkey -- string. como en los productos necesarios. Tu clave privada de reCAPTCHA de la página de registro de la API
    $remoteip -- cadena. como en los productos necesarios. La dirección IP del usuario, en formato 192.168.0.1
    $challenge -- string. como en los productos necesarios.
    El valor del campo del formulario recaptcha_challenge_field
    $response -- string. obligatorio. El valor del campo del formulario recaptcha_response_field
    Valor que se muestra Una instancia de la clase ReCaptchaResponse

    ReCaptchaResponse
    Campo
    $is_valid -- boolean ¿reCAPTCHA pensó que la respuesta era válida?
    $error -- string Si la respuesta no era válida, ¿cuál fue el problema? Este código de error puede ser usado en recaptcha_get_html
    Valor que se muestra El código HTML o URL sin procesar para decodificar la dirección de correo electrónico, según la función que utilices llamado.

    Mailhide

    La biblioteca de PHP de reCAPTCHA incluye vinculaciones para la API de Mailhide. Esta La API te permite unir un correo electrónico en un reCAPTCHA para evitar que los generadores de spam lo vean: examen...@example.com.

    La parte Mailhide de la biblioteca PHP requiere el módulo mcrypt de PHP.

    La API de Mailhide consta de dos funciones, recaptcha_mailhide_html y recaptcha_mailhide_url Las funciones tienen los mismos parámetros. La versión _html muestra HTML que se pueden colocar directamente en tu página web. La parte del nombre de usuario del correo electrónico que se pasa se trunca y se reemplaza por un vínculo que llama a Mailhide. La versión _url te proporciona la URL para decodificar el correo electrónico, y tú decides ubicarlo en HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Parámetro
    $pubkey: cadena La clave pública Mailhide de la página de registro
    $privkey -- cadena La clave privada de Mailhide de la página de registro.
    $email -- cadena La dirección de correo electrónico que quieres ocultar.

    En el siguiente ejemplo, se muestra cómo usar 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>