Evita el spam en formularios con el captcha de Google

Visitas: 386

En una página web o ecommerce donde haya formularios, es muy probable que se produzcan ataques donde lleguen datos falsos a dichos formularios. Para protegerse de estos ataques existen diferentes métodos que se pueden implementar, uno de ellos es poner un captcha en el formulario.

Un captcha es una medida de seguridad que se encarga de diferenciar entre usuarios y máquinas para poder detectar los datos que llegan de forma automática y los que son introducidos por un usuario real de la aplicación.

El core de Magento, en una instalación límpia, dispone de un módulo de captcha por defecto. Existen módulos de terceros, como el que ofrece Google que se encarga de añadir el captcha y verificar que el formulario lo ha enviado una persona real.

La dirección donde generar el captcha es esta

Se pueden diferenciar entre 3 tipos de captcha:

  • reCAPTCHA V2: Valida a los usuarios añadiendo una opción más en el formulario donde el usuario tiene que pulsar y validar unas preguntas para que no los detecte como spam.
  • Invisible recaptcha: Añade al formulario un botón que sustituye al original y envía datos a Google para que luego se puedan verificar en el backend.
  • reCAPTCHA Android: Es igual que la primera opción pero para proyectos Android.

La diferencia de los tres tipos de captcha que tiene Google se encuentra en el código que se añade al formulario para recoger los datos. En los tres opciones hace falta implementar esa verificación en la parte del servidor. En el caso de un proyecto web, podría ser en PHP.

Una vez elegido el tipo de captcha que se quiere, solamente hay que añadir en el <head> de la página el script

y, dependiendo de que captcha se haya elegido, añadir un botón o una etiqueta <div> que nos proporciona Google.

Un formulario web se envía a una URL donde existe un fichero que responde a esta. Es en ese fichero donde se tiene que validar la respuesta de Google, antes de trabajar los datos enviados en dicho formulario.

En el caso del formulario de contacto de Magento 2, por ejemplo, si no existe ningún plugin o preference que diga lo contrario, el fichero que verifica los datos de dicho formulario es el que se encuentra en el Módulo Contacto del core de Magento, en controller/index/post.php. En este fichero se verifican los datos que llegan del formulario para mostrar un error en caso de ser un correo no válido o tener algún campo requerido que esté vacío.

Para no actualizar el core de Magento, lo ideal es hacer un plugin around al método execute de dicho fichero y ahí añadirle la lógica del captcha antes de que envíe el email de contacto.

El código a añadir para la verificación en PHP es el siguiente:

Primero se recoge la respuesta de Google, y se lee en el contenido que devuelte la URL pasándole los parametros de la clave secreta proporcionada al crear el captcha. La respuesta de Google en el formulario y la IP del usuario. Google responde con un JSON donde obtenemos la respuesta.

Este código sirve para cualquier proyecto en PHP y nos permite controlar como se quiera la respuesta en caso de spam o no. 

CAPTCHA
Esta pregunta es para comprobar si usted es un visitante humano y prevenir envíos de spam automatizado.