"El diseño es el embajador silencioso de tu marca"
- Paul Brand

Integrar Google Recaptcha en PHP

Integrar Google Recaptcha en PHP es muy sencillo, este es el sistema de captchas más utilizado del mundo, y también uno de los más fáciles de adquirir.
Es necesario que tus formularios públicos de contacto o de lo que sean tengan un sistema de captchas, ¿la razón? tu deja abierto al público un sistema que ejecute una lógica en el servidor de una complejidad como está que suele acabar con el envío de un correo, con un registro en base de datos o con ambas, y verás lo rápido que alguien usa un robot para atacarte por ahí.

Si piensas que estoy paranoico por decir eso, tan solo piensa en que si tienes un formulario abierto sin ninguna comprobación de identidad cada vez que pulsen en enviar le estas dando una orden a tu servidor y este empieza a trabajar, para una máquina no sería dificil cubrir datos y pulsar ese botón en una fracción de segundo, imaginate que te empiezan a largar miles de envíos pues eso equivale a decir que te están haciendo un ataque DDOS, que básicamente es que te van a saturar el servidor y tu página se va a caer.

Por esta razón nacen los captchas, para evitar que las máquinas se hagan pasar por humanos y ejecuten tareas de forma cíclica a altísimas velocidades.

Pero vamos al lío ¿cómo integrar Google Recaptcha en PHP?, es muy sencillo pero en primer lugar deberás tener una página web, con ello me refiero a que no puedes pretender que se integre bajo tu localhost, ya que el captcha esta unido al dominio, y tu localhost no lo es, es solo tú máquina local.

Teniendo esto presente pulsa el siguiente enlace

Deberías estar viendo algo como la imagen de arriba, lo que tenemos aquí es un panel de administración que pregunta los datos de la página donde lo vamos a integrar.

En primer lugar tenemos un campo Etiqueta, aquí podemos escribir lo que queramos o incluso dejarlo en blanco pero lo normal es que pongas un comentario de la página para que te ayude a identificarlo.

Despues tenemos que escoger el tipo de reCaptcha que queremos utilizar en nuestra página, yo he marcado el primero que es el típico que vemos en mil sitios de pulsar en una casilla que dice «No soy un robot«.

Por último dentro del campo Dominios, tenemos que poner precisamente eso, el dominio o dominios para los cuales se nos generan una serie de datos de validación que ahora veremos (por eso decía antes que tienes que tener un dominio).

Una vez puesto tu dominio (yo he puesto loquesea.com) solo te falta aceptar los términos de uso y pulsar ese botón de registro que hay al final.

Ahora pasamos a la siguiente pantalla.

Esta pantalla ya es mas compleja, tenemos información de como crearlo y una serie de datos que debemos apuntar.

Pero lo que hoy nos ocupa es hacer funcionar Google Recaptcha en PHP, de manera que en primer lugar vamos a apuntar de esta página las dos claves, la clave del sitio y clave secreta.

Con la clave del sitio básicamente podemos renderizar el captcha en la página, y si la gente mira el código fuente la puede ver sin problemas.

Y con la clave secreta podemos comunicarnos con Google para que acepte la validación del captcha, por supuesto eso lo hacemos en el backend de la página y esa clave nunca la revelaremos ni podrá esta visible en ningun lado, porque si la conocen nada de esto sirve para nada.

Renderizando el captcha en nuestra página

Aunque en la pantalla de arriba ya vienen las instrucciones de como hacerlo vamos a volver a explicarlo.

En primer lugar necesitamos cargar el script de Google para el recaptcha, la recomendación es hacerlo dentro de las etiquetas <head> aunque yo lo tengo en varias páginas al final de la página justo antes de cerrar el <body> y va perfectamente.

El script es este:

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

Tambien necesitamos tener un contenedor para que este script renderice el captcha, ponemos donde sea conveniente:

<div class="g-recaptcha" data-sitekey="6LfBcTcUAAAAABqT4LqWHBVZ4c3DtAit4ZoIMABf"></div>

El script ataca el elemento que tiene la clase g-recaptcha y a mayores con un atributo data-sitekey le pasamos la clave del sitio a nuestro captcha para que funcione.

Aunque en las instrucciones no aparace esto esta bien comentar que podemos escoger el estilo del captcha de google, en concreto podemos escoger entre un tema claro (light) y uno oscuro (dark).

Para establecer el tema tendríamos que haber puesto el atributo data-theme de esta manera…

<div class="g-recaptcha" data-sitekey="6LfBcTcUAAAAABqT4LqWHBVZ4c3DtAit4ZoIMABf" data-theme="light"></div>

Con esto tenemos en pantalla nuestro captcha pero falta lo más importante, que funcione.

Haciendo funcionar el captcha

Como este artículo se llama «integrar Google Recaptcha en PHP» voy a limitarme a explicar como hacerlo funcionar con este lenguaje, lo cierto es que la manera es la misma para todos, cambiará la librería que usemos.

Como estamos en PHP voy a usar Composer para descargar esta dependencia a mi proyecto.

Si no sabes que es y vienes de otros lenguajes como Javascript piensa en Composer como si fuera el NPM de PHP, si vienes de Ruby piensa que Composer es el Bundler de PHP.

Al fin y al cabo todos sirven para lo mismo, manejar las dependencias o paquetes que nuestro proyecto tiene.

Explicado esto, para que composer descargue el paquete del recaptcha necesitamos ejecutar este comando.

composer require google/recaptcha "~1.1"

Con ello ya lo tenemos descargado y ahora solo tenemos que ir al controlador donde tengamos la lógica de nuestra página e importarlo, lo hacemos como siempre.

use ReCaptcha\ReCaptcha;

Ahora que está disponible para ser usado, lo instanciamos y empezamos a añadir los datos.

$response = $_POST['g-recaptcha-response'];

$secret = "6LfBcTcUAAAAAPcDKUiQLFM1K1muB5dFpJCgVgFS";
$remoteip = $_SERVER['REMOTE_ADDR'];
$recaptcha = new ReCaptcha($secret);
$resp = $recaptcha->verify($response, $remoteip);

if ($resp->isSuccess()) {
  // Ha pasado la validación, detecta que es una persona y el proceso continua.
} else {
  // Detecta que es un robot y lo devolvemos a la página indicando el error.
}

Voy a explicar lo que estamos haciendo, en primer lugar he guardado dentro de la variable $response el resultado del captcha, en caso de que no lo hayan ni pulsado este campo viene vacío.
He guardado la dirección IP desde la cual está viendo la página actual el usuario en la variable $remoteip.
He guardado en la variable $secret la clave privada que antes vimos.

He creado una instancia nueva del ReCaptcha usando esa clave privada, y una vez creada uso el método verify pasandole dos parámetros, la respuesta y la dirección IP que antes guardamos.

Hemos guardado la respuesta del método verify dentro de una variable llamada $resp y ahora con la función isSuccess comprobamos si Google dio por bueno o no el captcha, en función de lo que nos diga seguimos con la ejecución del código que como dijimos antes puede ser el envío de un correo, una operación contra BBDD, o lo mandamos de vuelta a la página indicandole que ha fallado.

En resumen integrar Google Recaptcha en PHP es muy sencillo y necesario cuando tenemos los casos que hemos visto, además de ser uno de los captchas menos invasivos y más sólidos que existen ahora mismo.

The following two tabs change content below.
Especialista en diseño web responsive, programador html5, css3, jquery, php y java.

Latest posts by Óscar Lijó (see all)