Idiomas: English · Nederlands · Deutsch · Español · Français · Italiano · Português · Papiamentu · Frysk

Índice / Artículos / Alternativa a CAPTCHA

Alternativa a CAPTCHA

Protege tus formularios sin molestar al usuario

Publicado
Actualizado
(creado )
Escrito por
Willem L. Middelkoop
Temas
nube · ciberseguridad · hacking · gente · servidor · web · diseño web · trabajo
Versión humana de este artículo
https://willem.com/es/2022-07-30_alternativa-a-captcha/
English
CAPTCHA Alternative
Nederlands
CAPTCHA Alternatief
Deutsch
CAPTCHA-Alternative
Français
Alternative au CAPTCHA
Italiano
Alternativa al CAPTCHA
Português
Alternativa ao CAPTCHA
Papiamentu
Alternativa pa CAPTCHA
Frysk
CAPTCHA-alternatyf
Idiomas
Traducido del original en inglés por un modelo de lenguaje en dos pasadas (traducción y corrección) con un glosario y un corrector ortográfico; aún no revisado por un hablante nativo.

Resumen

Seguro que te has topado con un CAPTCHA: protegen los formularios web pidiéndote que teclees unos caracteres deformados o que selecciones fotos en las que aparece algo concreto. ¿Por qué se usan y existe una alternativa más amable con el usuario?

Texto completo

¿Qué es un CAPTCHA?

Los CAPTCHA están diseñados para distinguir a los ordenadores de las personas, así que suelen pedirte algo que a un ordenador le cuesta hacer. De ahí sus siglas en inglés: Completely Automated Public Turing test to tell Computers and Humans Apart (prueba de Turing pública y totalmente automatizada para distinguir ordenadores de humanos). Quienes crean sitios web usan los CAPTCHA para proteger sus formularios contra el spam automatizado y el abuso.

CAPTCHA típicos que puedes encontrarte en la web (créditos de la imagen: Wikipedia y Google)
CAPTCHA típicos que puedes encontrarte en la web (créditos de la imagen: Wikipedia y Google)

¿Por qué necesitas proteger un formulario?

Un formulario web típico funciona en dos pasos:

  • introducir información: escribes algunos datos y haces clic en «ENVIAR» (o algo parecido) para continuar.
  • procesar información: un servidor procesa los datos que has introducido y, posiblemente, reenvía tu mensaje o solicitud al correo electrónico de alguien.
Un formulario web típico: el servidor procesa la información de una persona y la reenvía a otras personas, como tú. Los atacantes pueden suplantar fácilmente al remitente, lo que permite abusar de tu servidor de forma automatizada
Un formulario web típico: el servidor procesa la información de una persona y la reenvía a otras personas, como tú. Los atacantes pueden suplantar fácilmente al remitente, lo que permite abusar de tu servidor de forma automatizada

El problema de este enfoque es que el primer paso es muy fácil de automatizar para quien tiene malas intenciones. Usan otro ordenador para enviar información al servidor una y otra vez, obligándolo a procesar montones de datos, a menudo mensajes de spam. A los hackers les encanta encontrar formularios en los que puedan manipular la dirección del destinatario («TO»), porque así pueden usar tu servidor para mandar spam a cualquier persona del mundo.

Un CAPTCHA protege tu formulario impidiendo que un ordenador envíe información a tu servidor de forma automática.

Los problemas de los CAPTCHA

Sinceramente, me parecen feos y engorrosos, y no soy el único. Ponen un obstáculo a las personas: bajan las tasas de conversión, de clics y demás. Además, suelen ser muy poco amables con quienes ven mal.

Los críticos también se quejan de que Google sea uno de los proveedores más populares de CAPTCHA gratuitos. Cabe preguntarse por qué ofrecen ese servicio sin cobrar. Es una forma excelente de colarse en muchos recorridos de cliente (comerciales) y de dar más datos a sus algoritmos para perfilar a la gente. Conviene tenerlo en cuenta si valoras la privacidad y el RGPD y las leyes sobre cookies.

La alternativa

Por eso me propuse crear una alternativa eficaz a los CAPTCHA para los formularios web que construyo para mis clientes. Mi enfoque tiene dos partes:

  • ocultar: la mayoría de los atacantes buscan objetivos rastreando cualquier etiqueta FORM, que es la que suele usarse para crear formularios. Mis formularios no llevan la etiqueta FORM, sino otros elementos comunes como DIV: un camuflaje perfecto. Si no pueden verlo, no pueden romperlo.
  • reforzar: mis formularios añaden un paso extra que dificulta automatizar su abuso. Lo llamo «conseguir un sello de correos» antes de enviar.

Firma criptográfica previa al envío: el sello de correos

Hay que entender que los atacantes piensan en términos económicos: solo se esfuerzan si la ganancia posible lo merece. Si les pones lo bastante difícil abusar de tu formulario, lo normal es que sigan su camino y lo dejen estar. Antes de explicarte lo que hice, una advertencia:

Descargo de responsabilidad: Tienes que pensar bien para qué quieres proteger tu formulario. En mi caso, el objetivo es reducir (mucho) el número de mensajes de spam sin perder facilidad de uso. Eso me permite idear un sistema que no ofrece necesariamente una protección «a prueba de bombas», así que, si lo que quieres es proteger secretos nucleares, quizá este enfoque no te sirva. ¡Piensa siempre en tu modelo de amenazas!

Para proteger los formularios web añado un paso extra que he bautizado como «conseguir un sello de correos». Así, los pasos del formulario protegido quedan de esta manera:

  • introducir información: escribes algunos datos y haces clic en «ENVIAR» (o algo parecido) para continuar.
  • conseguir el sello: justo antes de enviar los datos de verdad, tu dispositivo contacta con el servidor para pedirle un token criptográfico que corresponda a las características de la información y del remitente. Pasa en milisegundos, nadie lo nota. Piensa en el token como un sello de correos específico para el paquete que envías, y que solo se puede usar una vez.
  • procesar información: los datos que has introducido se combinan con el token criptográfico y se envían al servidor. Si el token es válido, la información se procesa como siempre. Los tokens no válidos simplemente se ignoran, lo cual es importante para complicar mucho la ingeniería inversa al no dar ninguna pista (¡el servidor siempre responde «OK» :-) )!
Al introducir un token único y de un solo uso para cada mensaje, a los atacantes les resulta mucho más difícil automatizar el envío de mensajes, y tu formulario queda protegido contra quienes envían spam
Al introducir un token único y de un solo uso para cada mensaje, a los atacantes les resulta mucho más difícil automatizar el envío de mensajes, y tu formulario queda protegido contra quienes envían spam

Llevo usando este sistema desde 2016 y los servidores que procesan los envíos han gestionado literalmente millones de mensajes, con poquísimos casos de spam (menos de 100). Si los miras de cerca, la mayor parte del spam que se cuela es «trabajo manual»: posiblemente alguien que investiga el mecanismo. Como romper el sistema parece costar demasiado esfuerzo, resulta muy eficaz para mi objetivo de proteger los formularios web.

Conclusión

Los CAPTCHA son muy populares, y se entiende, pero no siempre hace falta ponerlos en tus formularios si te planteas alternativas. Mi consejo: ¡ponles las cosas difíciles a los atacantes y fáciles a tu público!

Formatos legibles por máquinas de esta página