Honeypot vs CAPTCHA: ¿cuál es mejor para la prevención de spam de formularios?
La prevención de spam de formularios se reduce a distinguir a los humanos de los bots. Existen dos técnicas principales: campos de honeypot y desafíos CAPTCHA. Cada uno tiene diferentes compensaciones entre efectividad y experiencia de usuario.
Esta guía los compara en detalle y explica cuándo usar cada uno.
¿Qué es un campo honeypot?
Un honeypot es un input de formulario oculto que los usuarios legítimos nunca ven ni usan. Los bots automatizados que rastrean la web y rellenan todos los campos que encuentran también rellenarán el honeypot y se delatarán.
<input type="text" name="botcheck" style="position: absolute; left: -9999px; opacity: 0;" tabindex="-1" autocomplete="off"/>Cuando se envía el formulario, el servidor comprueba si el campo honeypot tiene un valor. Si es así, el envío proviene de un bot y se rechaza.
Cómo los bots encuentran honeypots
Los bots sofisticados pueden detectar honeypots mediante:
- Checking for CSS properties that hide elements (
opacity: 0,left: -9999px) - Comprobando si el elemento es visible en la ventana gráfica
- Checking
tabindex="-1"which removes the field from tab order - Checking for common honeypot field names (
botcheck,honeypot,website_url)
Haciendo que los honeypots sean más difíciles de detectar
Utilice múltiples técnicas de ocultación y nombres de campos no obvios:
<input type="text" name="company_website" style="position: absolute; left: -9999px; opacity: 0; height: 0; width: 0; overflow: hidden;" tabindex="-1" autocomplete="off" aria-hidden="true"/>The field name company_website looks like a legitimate field that bots would fill in.
¿Qué es un CAPTCHA?
Un CAPTCHA (prueba pública de Turing completamente automatizada para diferenciar las computadoras de los humanos) presenta un desafío que los humanos pueden resolver pero los bots no.
Tipos de CAPTCHA
| Tipo | Ejemplo | Fricción del usuario |
|---|---|---|
| Invisible | Turnstile, reCAPTCHA v3 | Ninguno (verificación de antecedentes) |
| Desafío administrado | Modo administrado de Turnstile | Baja (solo cuando se sospecha) |
| Rompecabezas de imágenes | reCAPTCHA v2, hCaptcha | Alto (imágenes seleccionadas) |
| Desafío de texto | Escriba texto distorsionado | Alto |
| Problema matemático | Resolver 3 + 5 | Medio |
Cloudflare Turnstile
Turnstile es el CAPTCHA recomendado para formularios modernos:
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div><script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>- Respetuoso con la privacidad (sin seguimiento entre sitios)
- A menudo se resuelve sin mostrar ningún desafío
- No se requiere cuenta de Google
- Gratis para todos los sitios
Google reCAPTCHA v3
reCAPTCHA v3 asigna una puntuación a cada visitante según el comportamiento:
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script><script> grecaptcha.ready(function () { grecaptcha.execute("YOUR_SITE_KEY", { action: "submit" }).then(function (token) { document.getElementById("recaptchaToken").value = token; }); });</script><input type="hidden" id="recaptchaToken" name="g-recaptcha-response" />- Invisible (sin interacción del usuario)
- Basado en puntajes (0.0 = bot, 1.0 = humano)
- Requiere seguimiento de Google
- Requiere verificación de token del lado del servidor
Google reCAPTCHA v2
La conocida casilla de verificación "No soy un robot" con rompecabezas de imágenes:
<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div><script src="https://www.google.com/recaptcha/api.js" async defer></script>- Alta fricción (los rompecabezas de imágenes frustran a los usuarios)
- Muy eficaz contra bots
- Requiere seguimiento de Google
Comparación directa
| Factor | Honeypot | CAPTCHA |
|---|---|---|
| Fricción del usuario | Ninguno | Bajo a alto (depende del tipo) |
| Eficacia frente a bots básicos | Alto (70-80%) | Muy alta (95%+) |
| Eficacia frente a bots sofisticados | Bajo a medio | Alto |
| Efectividad frente a spammers humanos | Ninguno | Alto |
| Complejidad de implementación | Muy baja | Bajo a medio |
| Dependencias externas | Ninguno | Requiere servicio externo |
| Impacto de accesibilidad | Ninguno | Puede ser problemático |
| Impacto en la privacidad | Ninguno | Varía (torniquete: ninguno, reCAPTCHA: alto) |
| Mantenimiento | Ninguno | El servicio puede cambiar la API |
| Costo | Gratis | Gratis para pagar |
Cuándo usar un honeypot
Utilice un honeypot en cada formulario, siempre. No cuesta nada en experiencia de usuario y capta la mayoría de los envíos básicos de bots.
Mejor para:
- Formularios de poco tráfico (contacto, suscripción al boletín)
- Formularios donde la fricción del usuario debe ser absolutamente cero
- Primera línea de defensa en cualquier formulario
Cuándo usar un CAPTCHA
Agregue un CAPTCHA cuando:
- Su formulario recibe más de 100 envíos por día
- Observas que el spam pasa por el honeypot
- El formulario está en una página de alta visibilidad (página de inicio, página de precios)
- Necesita bloquear a los spammers humanos (no solo bots)
Mejor elección de CAPTCHA por escenario:
| Escenario | CAPTCHA recomendado |
|---|---|
| La mayoría de los formularios | Cloudflare Turnstile (modo administrado) |
| Sitios sensibles a la privacidad | Cloudflare Turnstile |
| Máxima protección contra bots | reCAPTCHA v2 (acepte la fricción) |
| Protección invisible | Turnstile o reCAPTCHA v3 |
Combinando ambos para una máxima protección
La configuración óptima utiliza ambas técnicas juntas:
<form action="https://api.formsfort.com/submit" method="POST"> <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<!-- Honeypot: catches basic bots --> <input type="text" name="company_website" style="position: absolute; left: -9999px; opacity: 0;" tabindex="-1" autocomplete="off" />
<!-- Form fields --> <label for="name">Name</label> <input type="text" id="name" name="name" required />
<label for="email">Email</label> <input type="email" id="email" name="email" required />
<label for="message">Message</label> <textarea id="message" name="message" required></textarea>
<!-- CAPTCHA: catches sophisticated bots and humans --> <div class="cf-turnstile" data-sitekey="YOUR_TURNSTILE_KEY"></div> <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<button type="submit">Send message</button></form>Este enfoque en capas captura:
- Bots básicos (honeypot)
- Bots sofisticados (CAPTCHA)
- Spammers humanos (CAPTCHA)
Agregue restricción de dominio y limitación de velocidad en el lado del servidor para una defensa completa.
Consideraciones de accesibilidad
Accesibilidad del Honeypot
Un honeypot implementado correctamente no afecta la accesibilidad:
tabindex="-1"removes it from keyboard navigationaria-hidden="true"hides it from screen readers- Posicionamiento fuera de pantalla significa que no se anuncia
Accesibilidad de CAPTCHA
Los CAPTCHA pueden ser problemáticos para usuarios con discapacidades:
- Los rompecabezas de imágenes son difíciles para los usuarios con discapacidad visual
- Existen alternativas de audio, pero a menudo son de mala calidad
- Los límites de tiempo pueden ser un desafío para los usuarios con discapacidades motoras
Se prefieren Turnstile y reCAPTCHA v3 porque a menudo se resuelven sin interacción del usuario. Cuando se muestre un desafío, proporcione métodos de contacto alternativos (correo electrónico, teléfono) para los usuarios que no puedan completarlo.
Resumen
Los honeypots y CAPTCHA cumplen diferentes funciones en la prevención de spam. Los honeypots son una primera línea de defensa sin fricción que atrapa bots básicos. Los CAPTCHA brindan una protección más sólida contra bots sofisticados y spammers humanos, pero agregan cierta fricción al usuario. Utilice un honeypot en cada formulario. Agregue Cloudflare Turnstile para formularios de tráfico medio y alto. Combínelo con restricción de dominio y limitación de velocidad para una protección integral.
Preguntas frecuentes
¿Cuál es la diferencia entre un honeypot y un CAPTCHA?
Un honeypot es un campo de formulario oculto que los bots completan pero que los humanos nunca ven. Un CAPTCHA es un desafío visible (o control invisible) que los humanos pueden superar pero los bots no. Los honeypots no tienen fricción para el usuario; Los CAPTCHA son más eficaces contra bots sofisticados.
¿Debo usar honeypot y CAPTCHA?
Sí. Utilice un honeypot en cada formulario como defensa base. Agregue un CAPTCHA para formularios de tráfico medio y alto donde es más probable que los bots sofisticados se dirijan a usted. Juntos proporcionan protección en capas.
¿Qué CAPTCHA es el más respetuoso con la privacidad?
Cloudflare Turnstile es el CAPTCHA más respetuoso con la privacidad. No rastrea a los usuarios entre sitios, no requiere una cuenta de Google y, a menudo, se resuelve sin mostrar ningún desafío al usuario.
¿Pueden los bots detectar campos de honeypot?
Los bots básicos no pueden detectar campos de honeypot. Los bots sofisticados pueden buscar técnicas de ocultación de CSS, posicionamiento fuera de la pantalla y campos no visibles en la ventana gráfica. El uso de múltiples técnicas de ocultación dificulta la detección.
¿Un honeypot afecta la accesibilidad del formulario?
Un honeypot implementado correctamente no afecta la accesibilidad. Utilice tabindex='-1' para eliminarlo del orden de pestañas y colóquelo fuera de la pantalla en lugar de usar display:none o aria-hidden, que algunos lectores de pantalla aún pueden anunciar.
Comience gratis
¿Listo para agregar formularios a su sitio estático?
No se requiere backend. Apunte su formulario HTML a FormsFort y comience a recibir envíos en minutos.