Antibot
Módulo anti-spam ligero que previene envíos de formularios robóticos al requerir JavaScript e interacción humana.
antibot
Install
composer require 'drupal/antibot:^2.0'
Overview
Antibot es un módulo extremadamente ligero diseñado para eliminar los envíos de formularios robóticos en tu sitio web de manera innovadora. El módulo funciona completamente en segundo plano y no requiere ninguna interacción por parte de los usuarios finales.
El mecanismo de protección funciona modificando la acción del formulario a una ruta sin salida e inyectando un campo de clave oculto. JavaScript escucha comportamientos similares a los humanos (movimiento del ratón, eventos táctiles o pulsaciones de las teclas Tab/Enter) y solo entonces restaura la acción original del formulario y establece el valor correcto de la clave. Sin JavaScript habilitado o sin demostrar comportamiento humano, el envío del formulario fallará.
El único requisito para los usuarios finales es que deben tener JavaScript habilitado. Si no lo tienen, los formularios protegidos mostrarán un mensaje indicando al usuario que JavaScript es necesario para usar el formulario.
Features
- Protección anti-spam invisible que no requiere interacción del usuario (sin CAPTCHAs)
- Detecta comportamiento humano a través del movimiento del ratón, gestos táctiles o navegación por teclado (Tab/Enter)
- Protege formularios redirigiendo envíos de bots a una página sin salida (/antibot)
- Soporta patrones con comodines para coincidencia de IDs de formulario (ej., comment_* protege todos los formularios de comentarios)
- Capacidad de excluir formularios específicos de la protección incluso cuando coinciden con comodines
- Modo de depuración para mostrar IDs de formularios y su estado de protección en las páginas
- Bypass basado en permisos que permite a usuarios de confianza omitir la protección de Antibot
- Invalidación adecuada de caché cuando cambia la configuración de protección
- Integración con el módulo Webform para configuración de protección individual de webforms
- Hooks para que otros módulos modifiquen el estado de protección o respondan a envíos rechazados
Use Cases
Proteger Formularios de Comentarios contra Bots de Spam
Por defecto, Antibot protege todos los formularios de comentarios usando el patrón 'comment_*'. Los bots de spam que no ejecutan JavaScript o no simulan interacción humana serán bloqueados de publicar comentarios. Esto reduce el spam en comentarios sin requerir que los usuarios resuelvan CAPTCHAs.
Asegurar el Registro de Usuarios contra Registros Automatizados
El formulario user_register_form está protegido por defecto, previniendo la creación automatizada de cuentas por bots. Esto es especialmente útil para sitios que permiten registro abierto pero quieren prevenir la creación masiva de cuentas falsas.
Proteger Formularios de Contacto sin Molestar a los Usuarios
Los formularios de contacto (contact_message_*) están protegidos por defecto. A diferencia de las soluciones CAPTCHA, los usuarios no necesitan demostrar que son humanos - solo necesitan interactuar naturalmente con la página (moviendo el ratón o usando la navegación por teclado).
Proteger Formularios Personalizados
Habilita temporalmente la opción 'Mostrar IDs de formularios' para ver el ID de cualquier formulario personalizado en tu sitio. Luego añade ese ID de formulario (o un patrón con comodín) a la lista de formularios protegidos. Los envíos de webforms personalizados pueden protegerse usando patrones como 'webform_submission_*'.
Permitir que Usuarios de Confianza Omitan la Protección
Asigna el permiso 'Omitir Antibot' a roles de confianza (como administradores o editores de contenido) para que puedan enviar formularios sin validación de Antibot. Esto es útil para pruebas automatizadas o para usuarios que pueden tener herramientas de accesibilidad que no activan eventos de ratón/teclado.
Control Detallado de Protección de Formularios
Usa la configuración excluded_form_ids para eximir formularios específicos de la protección incluso cuando coinciden con un patrón comodín. Por ejemplo, protege todos los formularios de contacto con 'contact_message_*' pero excluye uno específico con 'contact_message_newsletter' en la lista de excluidos.
Integración con el Módulo Webform
Cuando el módulo Webform está instalado, los webforms individuales pueden tener la protección de Antibot habilitada a través de la configuración de terceros del webform. El módulo gestiona automáticamente la configuración de form_ids cuando se guarda la configuración del webform.
Tips
- Usa patrones con comodines (ej., 'comment_*') para proteger múltiples formularios relacionados con una sola entrada en lugar de listar cada formulario individualmente
- Habilita 'Mostrar IDs de formularios' solo temporalmente cuando configures la protección - dejarlo habilitado en producción puede exponer IDs de formularios internos
- El permiso 'Omitir Antibot' es útil para entornos de pruebas automatizadas donde la interacción JavaScript no puede ser simulada
- Antibot funciona bien en combinación con otros módulos anti-spam como Honeypot para protección en capas
- Los formularios expuestos de Views tienen manejo especial - pueden ser protegidos pero funcionarán en la carga inicial de la página antes de la interacción del usuario
- Los formularios protegidos reciben la clase CSS 'antibot', que puedes usar para estilos personalizados si es necesario
Technical Details
Admin Pages 1
/admin/config/user-interface/antibot
Configura qué formularios están protegidos por Antibot y habilita el modo de depuración para identificar IDs de formularios. Esta página permite a los administradores especificar patrones de ID de formulario usando comodines para proteger múltiples formularios a la vez, excluir formularios específicos de la protección, y habilitar un modo de depuración que muestra los IDs de formularios en las páginas.
Permissions 2
Hooks 3
hook_antibot_form_status_alter
Permite a los módulos modificar si un formulario específico debe ser protegido por Antibot. Se llama después de que el ID del formulario coincide con los patrones configurados.
hook_antibot_reject
Reacciona al rechazo de un envío de formulario. Se llama cuando Antibot bloquea un envío de formulario debido a una clave de antibot faltante o inválida (comportamiento de bot detectado).
hook_antibot_generate_key_alter
Altera la clave encriptada generada para la validación del formulario. Permite a los módulos personalizar el proceso de generación de claves.
Troubleshooting 5
Asegúrate de que el usuario tenga JavaScript habilitado en su navegador. Si usa herramientas de accesibilidad o automatización, considera otorgar el permiso 'Omitir Antibot' a los usuarios afectados.
Añade los campos de Antibot a tu plantilla de formulario personalizada: {{ element.antibot_no_js }} y {% if element.antibot_key %}{{ element.antibot_key }}{% endif %}. La verificación condicional para antibot_key previene la renderización duplicada del campo.
Algunos bots sofisticados pueden ejecutar JavaScript y simular eventos de ratón. Considera combinar Antibot con otras medidas de protección contra spam como Honeypot o reCAPTCHA para formularios de alto valor.
Habilita la casilla 'Mostrar IDs de formularios' en la configuración de Antibot. Luego visita la página que contiene el formulario - el ID del formulario y su estado de protección se mostrarán como un mensaje. Recuerda deshabilitar esta opción después de identificar el ID del formulario.
El módulo incluye manejo adecuado de cache tags. Si experimentas problemas de caché, intenta limpiar todas las cachés vía Drush (drush cr) o la página de configuración de Rendimiento.
Security Notes 5
- La clave de Antibot se genera usando la función criptográfica HMAC de Drupal con el hash salt del sitio, haciéndola segura contra ataques de predicción
- La clave se mezcla antes de ser enviada al navegador y se desmezcla por JavaScript, añadiendo una capa adicional de ofuscación
- Los formularios sin JavaScript recurren al endpoint /antibot que muestra un error, sin exponer ninguna información sensible
- Los formularios enviados programáticamente (usando FormState::setProgrammed()) omiten la validación de Antibot, permitiendo envíos de formularios automatizados legítimos
- El módulo no almacena ningún dato de usuario ni información de seguimiento - solo valida los envíos de formularios en el momento del envío