Formularios seguros con campos ocultos
Una barrera adicional que no causa molestias
No parece tener mucho sentido que miles de bots se dediquen a tratar de romper los modestos sistemas de seguridad en los formularios de nuestros sitios web con el único propósito de enviarnos correos indeseados. Si la finalidad es conseguir enormes listas de distribución a donde enviar, previo pago, correos promocionales, tampoco parece que esas listas de distribución que entran por la puerta de atrás sean muy valiosas para las campañas de marketing de las empresas que las compran.
Los responsables del mantenimiento de los sitios web nos vemos obligados a una búsqueda permanente de sistemas de prevención de estos ataques en un difícil equilibrio con el objetivo de preservar la razón de ser de los formularios: abrir puertas a la comunicación con nuestros clientes y potenciales clientes; tenemos que implementar sistemas eficientes, pero con el menor impacto en la usabilidad por parte de los clientes reales.
Los sistemas de correo suelen contar con sistemas de identificación de correo spam, pero los bots también han aprendido a saltarse estas barreras. Ahora, además, que la mayoría de las webs profesionales están conectadas a bases de datos, necesarias para cumplir las leyes de protección de datos, el problema se multiplica al tener también basura en nuestras bases de datos.
No existe un sistema infalible
Ninguno de los sistemas utilizados hasta ahora ha resultado lo suficientemente robusto para resistir los ataques de los bots. Ahora es el turno de sistema Recaptcha de Google que parte del análisis del comportamiento (y el cruce de mucha información de millones de formularios) para discernir bots de usuarios reales. Veremos lo que tarda en dejar de ser útil; las características de los bots que analiza éstos pronto las disimularán.
Y es que los bots aprenden rápido, a fuerza de intentar romper millones de sistemas captcha. Cuanto más extendido esté un sistema, cuanto más popular sea, más oportunidades de superarlo con el sistema de ensayo y error a velocidades de vértigo.
Si quieres un sistema Captcha exclusivo, disponemos de un sistema captcha secuencial PHP gratuito de desarrollo propio.
Además, éste, como otros sistemas que se comercializan, tienen como valor troncal para las compañías que los distribuyen, tener pleno acceso a nuestro tráfico.
Una barrera inteligente e invisible
Dado que, por sofisticados que sean, todos los sistemas captcha son vulnerables, quizá la mejor defensa contra los bots sea aplicar un poco de sentido común. Con independencia del sistema captcha de su preferencia, y adicionalmente a éste, coloquemos algún campo oculto en nuestros formularios.
Además, será conveniente, de cara a engañar a los bots, no poner a esos campos ningún nombre evidente como campo oculto, o similar. Ni tan siquiera conviene diferenciarlos con una clase diferente de la del resto de campos. La mayoría de los bots ya saben que este tipo de campos existen y han aprendido a no cumplimentarlos. Deberemos ocultar que es un campo oculto.
Este tipo de barrera pasa completamente desapercibida para los usuarios reales de nuestros formularios, por tanto, nada importa si, en lugar de un campo oculto, ponemos dos o tres. Este elemento (o estos), junto con unas líneas de estilo en nuestro CSS, un mínimo código PHP y una pequeña argucia, puede resultar realmente efectivo para alejar a los bots de nuestro buzón de correo y de nuestra base de datos.
Un código html perfectamente normal
Campos secretos en el html
Junto al nombre, dirección, correo electrónico, incluyamos algún campo adicional. Un único campo-trampa es suficiente, pero podemos poner cuantos queramos; no van a molestar a los usuarios reales y no van a consumir apenas recursos.
Por ejemplo, si sólo usamos un campo para el nombre, podemos incluir otro que llamaremos "apellidos", de forma que tendremos un campo "nombre" identificado con "name='name' id='name'" y otro campo "apellidos" identificado como "name='surname' id='surname'". Podríamos incluir otros campos-trampa como dirección o calle, cualquiera que parezca razonable pero que no nos interese.
Estos campos no serán visibles para los usuarios reales de nuestros formularios y por tanto no los rellenarán. Por el contrario, si serán visibles campos como nombre, email o empresa que serán los que rellenen nuestros clientes. Huyamos de diferenciarlos con clases diferentes para que no resulten sospechosos y apliquemos los estilos a través de un “Id”.
Un campo-trampa especialmente útil es uno al que llamaremos "url", muy atractivo para los spam de cara a incluir una dirección web, una información por la que la mayoría de los formularios no tienen ningún interés.
Si los nombres de los diferentes campos son razonables y la única diferencia es si se ven o no en pantalla, los bots no serán capaces de diferenciarlos y, muy probablemente, incluirán información en esos campos-trampa.
Apenas una línea de CSS para definir los campos no visibles
CSS mínimo pero inteligente
Como sabréis, el identificativo “name” de los inputs de los formularios es el que recoge el fichero php que gestiona el formulario. Por el contrario, el identificativo “id” vincula a un campo con una etiqueta (label). Pero, con independencia de esta función, puede servir para aplicar un estilo particular a ese campo.
Además, para aplicar estilos a los formularios, suele ser suficiente con aplicarlos a los tipos. Podemos definir estilos para "input" o para "button"; podemos diferenciarlos a traves del "id" del propio formulario o, en última instancia, podemos crear una clase para aplicar estilos a nuestros campos.
Por tanto, que tal si incluimos el identificativo “id” en todos nuestros campos para, desde la hoja de estilos CSS, decidir qué campos se visualizan y cuáles no. Son sólo dos líneas. Agrupamos con comas los campos visibles y les aplicamos el estilo “display:block”. Por el contrario, los campos que no queremos que se vean irán agrupados con el estilo “display:none”.
Si tus formularios incluyen etiquetas (label), éstas deberán incluir una "id" que tendremos que ocultar también el el fichero CSS.
Un formulario perfectamente normal, aunque tenga dos campos no visibles
PHP: la trampa final
Ahora estamos seguros de que, si llega algún dato dentro de los campos ocultos, ese correo es spam. Habría conseguido saltar nuestro sistema captcha, pero no se ha percatado de que el formulario contenía campos-trampa. Sólo tenemos que rechazarlo. Pero, quizá, si lo rechazamos, estamos invitando al bot a seguir intentándolo hasta que descubra cómo saltar nuestros campos ocultos.
La mejor estrategia será volver a engañarlo y que piense que ha logrado su objetivo. Por tanto, en lugar de ejecutar un “exit”, la mejor opción será convencerlos de que ha logrado su objetivo y responderle como si hubiera logrado enviarnos un correo.
Al detectar que alguno de nuestros campos-trampa no está vacío generaremos una respuesta del tipo: "Gracias por ponerse en contacto con nosotros, en breve nos pondremos en contacto con usted". Pero, por el contrario, bloquearemos el envío del correo.
El bot creerá haber completado su misión y no seguirá intentando romper nuestro captcha.
Descarga gratuita
Si quieres disponer de un formulario con campos ocultos, sus líneas de estilo CSS y de PHP para gestionarlo, sólo debes darte de alta en nuestra base de datos y descargártelo gratuitamente.
En estos links tienes acceso al fichero .rar y a las instrucciones de instalación.
Ya estoy dado de alta en la base de datos
Si ya estás dado de alta en nuestra base de datos, introduce tu correo electrónico
No estoy dado de alta en la base de datos
Rellena tus datos en este formulario para acceder al fichero .rar.
Fecha publicación: 25-11-2020
Servicios de diseño y programación web
