Cómo incluir un captcha en nuestra web

Un captcha es un sistema de verificación online que comprueba que un formulario ha sido escrito por un humano y no por una máquina. Aunque en ocasiones pueden resultar molestos, cumplen su función: evitan que robots, bots o máquinas envíen información a través de los formularios de una web de manera automática e indiscriminada.

En este artículo, explicamos cómo se incluye un captcha en nuestra página web, basándonos en uno de los sistemas más utilizados, el que ofrece Google con su reCAPTCHA, y que resulta muy  fácil de implementar con cualquier lenguaje.

En unos pocos y sencillos pasos te mostraremos cómo instalar un captcha en tu Web.

  1. Registrarse en reCAPTCHA. Nos dirigiremos a http://recaptcha.net/  y nos identificamos como usuarios de Google.  En su defecto, tendremos que registrarnos.
    Una vez identificados nos solicitarán el dominio o dominios donde queremos implantar nuestras captchas, una etiqueta a modo de identificador y un correo o correos donde puedan notificarnos alertas.
    A continuación nos mostrará lo siguiente:
    Public Key: 5LfCABCDEFGHIJUNDSBOejHq-5n5StSWawBpCAMX
    Private Key: 6LfCAAAFHJSDFGHHJHDeju3a-Z5lomjShHKaGh9g
    En el sitio de reCAPTCHA tendremos que descargarnos los códigos en el lenguaje que queramos, las librerías para poner en nuestro servidor y unos ejemplos de uso del sistema, algo que encontraremos aquí:  https://developers.google.com/recaptcha/intro.
    En este ejemplo, mostraremos la versión PHP. Una vez descargado el zip que contiene la librería PHP, la ubicamos en nuestro servidor. Recuerda dónde la has puesto, porque tendrás que hacer un include con PHP de esa librería.
    Por ejemplo, podríamos colocar dicha librería en el mismo directorio donde está la página PHP que va a hacer uso de ella. Entonces la incluiríamos con algo como esto: require_once(‘recaptchalib.php’);
  2. Incluir el captcha en el formulario
    En la librería descargada (recaptchalib.php) existe una función que utilizaremos para mostrar la captcha. Tan sólo tenemos que llamarla con los parámetros oportunos. La función devuelve el código HTML que tenemos que colocar en la página para que ésta  se muestre:
    .recaptcha_get_html($captcha_publickey, $error_captcha);
    Los parámetros que recibe son la llave pública que nos mostraron anteriormente y un código de error (opcional).
    El código del formulario podría ser así:
    <?
    require_once('recaptchalib.php');
    //Llaves de la captcha
    $captcha_publickey = "6LfC?.";
    $captcha_privatekey = "6LfC? ";
    //por ahora ponemos a null el error de la captcha
    $error_captcha=null;
    ?>
    <form action="/blogmiejemplo_formulario.php" method="post">
    Nombre: <input type="text" name="nombre" size="30">
    <br>
    Edad: <input type="text" name="edad" size="3">
    <br>
    <?
    //escribimos en la página lo que nos devuelve recaptcha_get_html()
    echo recaptcha_get_html($captcha_publickey, $error_captcha);
    ?>
    <br>
    <input type="submit" value="Enviar">
    </form>
  3.  Validar el captcha
    Existe otra función para validar la captcha, llamada recaptcha_check_answer(). Ésta recibe también varios parámetros: la llave privada (Private Key), la IP del usuario, y dos campos que contienen los valores que envía la captcha dentro del formulario $_POST[“recaptcha_challenge_field”] y $_POST[“recaptcha_response_field”]
    La función retorna un objeto con dos propiedades: is_valid , un boleano para decir si se ha validado correctamente la captcha.  error, un código de error que especifica qué ha ido mal si no se validó correctamente el texto.
    Así podríamos  validar el captcha:
    $captcha_respuesta = recaptcha_check_answer ($captcha_privatekey,
    $_SERVER["REMOTE_ADDR"],
    $_POST["recaptcha_challenge_field"],
    $_POST["recaptcha_response_field"]);
    if ($captcha_respuesta->is_valid) {
    //todo correcto
    //hacemos lo que se deba hacer una vez recibido el formulario válido
    }else{
    //El código de validación de la imagen está mal escrito.
    $error_captcha = $captcha_respuesta->error;
    }

    Hacemos una llamada a la función recaptcha_check_answer() enviando los parámetros comentados y almacenamos el valor devuelto por la función en la variable $captcha_respuesta.
    Después, hacemos la comprobación para saber si el atributo $captcha_respuesta->is_valid es true. Con esto, sabremos que el texto introducido de la imagen está validado correctamente y realizamos la función que tengamos dentro del formulario.
    En caso de que  $captcha_respuesta->is_valid  sea falso, querrá decir que no se ha escrito bien el texto que se mostraba en la imagen. Podemos entonces actualizar la variable $error_captcha para que indiquemos al usuario el error que ha habido.

El código completo te lo mostramos aquí:
<html>
<head>
<title>Página con formulario protegido por captcha</title>
</head>
<body>
<?
require_once('recaptchalib.php');
//Llaves de la captcha
$captcha_publickey = "6LfC?.";
$captcha_privatekey = "6LfC? ";
$error_captcha=null;
if ($_POST){
$captcha_respuesta = recaptcha_check_answer ($captcha_privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if ($captcha_respuesta->is_valid) {
//todo correcto
//hacemos lo que se deba hacer una vez recibido el formulario válido
echo "Todo correcto!";
}else{
//El código de validación de la imagen está mal escrito.
echo "Has escrito mal el texto";
$error_captcha = $captcha_respuesta->error;
}
}
?>
<form action="/blogmiejemplo_formulario.php" method="post">
Nombre: <input type="text" name="nombre" size="30">
<br>
Edad: <input type="text" name="edad" size="3">
<br>
<?
//escribimos en la página lo que nos devuelve recaptcha_get_html()
echo recaptcha_get_html($captcha_publickey, $error_captcha);
?>
<br>
<input type="submit" value="Enviar">
</form>
</body>
</html>