← Todos los artículos
Prevención de spamSeguridadUX

Honeypot vs CAPTCHA: ¿cuál es mejor para la prevención de spam de formularios?

Equipo de FormsFort ·

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

TipoEjemploFricción del usuario
InvisibleTurnstile, reCAPTCHA v3Ninguno (verificación de antecedentes)
Desafío administradoModo administrado de TurnstileBaja (solo cuando se sospecha)
Rompecabezas de imágenesreCAPTCHA v2, hCaptchaAlto (imágenes seleccionadas)
Desafío de textoEscriba texto distorsionadoAlto
Problema matemáticoResolver 3 + 5Medio

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

FactorHoneypotCAPTCHA
Fricción del usuarioNingunoBajo a alto (depende del tipo)
Eficacia frente a bots básicosAlto (70-80%)Muy alta (95%+)
Eficacia frente a bots sofisticadosBajo a medioAlto
Efectividad frente a spammers humanosNingunoAlto
Complejidad de implementaciónMuy bajaBajo a medio
Dependencias externasNingunoRequiere servicio externo
Impacto de accesibilidadNingunoPuede ser problemático
Impacto en la privacidadNingunoVaría (torniquete: ninguno, reCAPTCHA: alto)
MantenimientoNingunoEl servicio puede cambiar la API
CostoGratisGratis 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:

EscenarioCAPTCHA recomendado
La mayoría de los formulariosCloudflare Turnstile (modo administrado)
Sitios sensibles a la privacidadCloudflare Turnstile
Máxima protección contra botsreCAPTCHA v2 (acepte la fricción)
Protección invisibleTurnstile 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 navigation
  • aria-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.