Honeypot
Un módulo de prevención de spam que utiliza campos honeypot y restricciones basadas en tiempo para disuadir envíos automatizados de formularios sin usar CAPTCHAs.
honeypot
Install
composer require 'drupal/honeypot:^2.2'
composer require 'drupal/honeypot:^2.1'
Overview
El módulo Honeypot proporciona un método efectivo y no intrusivo para prevenir que los bots de spam completen formularios en tu sitio Drupal. A diferencia de los CAPTCHAs que requieren interacción del usuario, Honeypot funciona de manera invisible en segundo plano utilizando dos técnicas complementarias.
La primera técnica añade un campo honeypot oculto a los formularios. Dado que los bots de spam típicamente completan todos los campos disponibles, rellenarán este campo oculto que los usuarios reales no pueden ver. Cuando un envío incluye datos en el campo honeypot, es rechazado como spam.
La segunda técnica implementa protección basada en tiempo. Se almacena una marca de tiempo cuando el formulario se carga, y si el formulario se envía más rápido de lo humanamente posible (límite de tiempo configurable), el envío es rechazado. Esto es efectivo porque los bots de spam típicamente envían formularios casi instantáneamente.
Honeypot incluye una penalización de tiempo exponencial para infractores reincidentes: cada envío fallido aumenta el tiempo de espera requerido de forma exponencial, haciendo cada vez más difícil que los bots persistentes envíen formularios exitosamente.
Features
- Protección con campo honeypot - añade un campo oculto que activa el rechazo si es completado por bots
- Protección de formularios basada en tiempo - requiere un tiempo mínimo antes de que se acepte el envío del formulario
- Penalización de tiempo exponencial para infractores reincidentes basada en el historial de envíos fallidos
- Proteger todos los formularios del sitio o seleccionar formularios específicos individualmente
- Omitir protección para usuarios con permisos específicos (por ejemplo, administradores)
- Registro de envíos de formularios bloqueados para monitoreo y análisis
- Integración con el módulo Rules mediante eventos para reacciones personalizadas a rechazos de spam
- Tour interactivo para guía de configuración
- Limpieza automática de registros antiguos de envíos fallidos mediante cron
- Manejo de caché de página con desactivación automática de caché cuando la protección de tiempo está activa
- API programática para añadir protección a formularios personalizados
Use Cases
Proteger el registro de usuarios contra bots de spam
Habilita Honeypot en el formulario de registro de usuario para prevenir la creación automatizada de cuentas. Navega a /admin/config/content/honeypot y marca 'Formulario de registro de usuario' bajo Formularios habilitados para Honeypot. Establece un límite de tiempo de 5-10 segundos para capturar bots que envían instantáneamente.
Protección de formularios en todo el sitio
Para sitios bajo ataque intenso de spam, habilita 'Proteger todos los formularios con Honeypot' para añadir protección a cada formulario. Ten en cuenta que esto deshabilita el caché de página en páginas con formularios cuando el límite de tiempo está habilitado. Los formularios del sistema, formularios de búsqueda y formularios expuestos de Views son excluidos automáticamente.
Añadir Honeypot a formularios personalizados
Usa el servicio honeypot para añadir protección a formularios de módulos personalizados. En tu constructor de formularios o hook_form_alter: \Drupal::service('honeypot')->addFormProtection($form, $form_state, ['honeypot', 'time_restriction']); Puedes incluir solo 'honeypot' o solo 'time_restriction' si es necesario.
Monitorear intentos de spam
Habilita 'Registrar envíos de formularios bloqueados' para rastrear intentos de spam en el registro de Drupal. Revisa los registros en /admin/reports/dblog filtrados por 'honeypot' para entender patrones de spam y verificar que la protección está funcionando.
Reacción personalizada al spam con Rules
Instala el módulo Rules y crea una regla que reaccione al evento 'Después de rechazar un envío de formulario'. Usa esto para enviar notificaciones por correo electrónico, añadir IPs a una lista de bloqueo o disparar otras respuestas automatizadas a intentos de spam.
Permitir a los administradores omitir la protección
Por defecto, los usuarios con el permiso 'bypass honeypot protection' no están sujetos a las verificaciones de honeypot. Asigna este permiso a roles de confianza como Administrador para prevenir falsos positivos al probar o durante envíos rápidos legítimos de formularios.
Tips
- Usa un nombre de elemento tentador como 'url', 'homepage' o 'link' para animar a los bots a completarlo
- Comienza con un time_limit de 5 segundos y ajústalo según la complejidad del formulario y los comentarios de los usuarios
- Para formularios de comercio o pago, considera deshabilitar la protección de tiempo para evitar falsos positivos durante compras rápidas
- La penalización de tiempo exponencial significa que los infractores reincidentes enfrentan tiempos de espera cada vez más largos automáticamente
- Usa hook_honeypot_form_protections_alter para añadir protección a formularios de otros módulos
- Monitorea el registro regularmente después de habilitar para asegurar que usuarios legítimos no estén siendo bloqueados
- Combina Honeypot con otros métodos de prevención de spam para defensa en profundidad
Technical Details
Admin Pages 1
/admin/config/content/honeypot
Configura los ajustes de prevención de spam de Honeypot incluyendo métodos de protección, límites de tiempo y selección de formularios a proteger. Esta página permite a los administradores ajustar el comportamiento anti-spam para su sitio.
Permissions 2
Hooks 4
hook_honeypot_form_protections_alter
Alterar las protecciones de honeypot aplicadas a un formulario particular. Usa esto para añadir o eliminar tipos de protección para formularios específicos.
hook_honeypot_add_form_protection
Reaccionar después de que la protección de honeypot ha sido añadida a un formulario. Útil para rastrear cuándo se muestran formularios protegidos.
hook_honeypot_reject
Reaccionar cuando un envío de formulario es rechazado por Honeypot. Permite manejo personalizado de intentos de spam.
hook_honeypot_time_limit
Añadir tiempo adicional al límite de tiempo de Honeypot. Devuelve un entero de segundos para añadir al límite.
Troubleshooting 5
El límite de tiempo puede ser demasiado alto para formularios simples. Reduce el ajuste time_limit en /admin/config/content/honeypot, o establécelo en 0 para deshabilitar la protección basada en tiempo mientras mantienes activo el campo honeypot.
La protección basada en tiempo requiere deshabilitar el caché de página para usuarios anónimos. Establece time_limit en 0 si el caché es crítico, o usa solo la protección de campo honeypot eliminando 'time_restriction' de las opciones de protección del formulario.
Cambia el ajuste element_name a algo que no entre en conflicto con los campos existentes de tu formulario. Alternativas comunes: homepage, link, website_url, contact_url.
Aumenta el time_limit a un valor más alto (10-15 segundos). Considera habilitar la protección en todos los formularios. Verifica que el nombre del elemento honeypot no esté siendo reconocido por bots sofisticados.
Asegúrate de no estar conectado como un usuario con el permiso 'bypass honeypot protection'. Los usuarios administrativos omiten la protección por defecto.
Security Notes 5
- Honeypot no es una solución completa contra spam - atacantes determinados con bots capaces de JavaScript pueden evadir la protección
- Siempre usa Honeypot en combinación con otras medidas de seguridad para formularios sensibles
- El permiso de bypass solo debe otorgarse a roles altamente confiables
- Los registros de envíos fallidos pueden contener información sobre atacantes - revísalos y limpia periódicamente
- Considera limitar la tasa a nivel de servidor además de la protección de Honeypot