CAPTCHA
Proporciona funcionalidad CAPTCHA (Prueba de Turing Pública Completamente Automatizada para Diferenciar Computadoras de Humanos) para proteger formularios web de envíos de spam automatizados.
captcha
Install
composer require 'drupal/captcha:^2.0'
Overview
El módulo CAPTCHA es un sistema integral de protección contra spam que añade pruebas de desafío-respuesta a los formularios de Drupal. Proporciona una API que permite a otros módulos implementar varios tipos de CAPTCHA, e incluye un desafío CAPTCHA matemático integrado.
Los desafíos CAPTCHA pueden añadirse a prácticamente cualquier formulario de Drupal mediante el concepto de "CAPTCHA Points" - entidades de configuración que asocian formularios con tipos de desafío específicos. El módulo incluye CAPTCHA Points preconfigurados para formularios comunes como inicio de sesión, registro y restablecimiento de contraseña.
Las características principales incluyen lista blanca de IPs para eludir desafíos desde direcciones de confianza, ajustes de persistencia configurables para omitir CAPTCHAs después de respuestas exitosas, modo de administración para configuración fácil, y seguimiento de estadísticas de envíos bloqueados. El módulo se integra con el sistema de caché de páginas de Drupal, deshabilitando automáticamente el caché para páginas con desafíos CAPTCHA.
Los desarrolladores pueden crear tipos de CAPTCHA personalizados implementando hook_captcha(), y pueden personalizar la ubicación del CAPTCHA dentro de los formularios usando hook_captcha_placement_map().
Features
- Desafío CAPTCHA matemático - presenta problemas aritméticos simples (ej., 5 + 3 = ?) que los usuarios deben resolver
- Sistema de CAPTCHA Points - entidades de configuración que mapean IDs de formularios a tipos de desafío con estado habilitado/deshabilitado
- Modo CAPTCHA global - opcionalmente añade desafíos a todos los formularios del sitio
- Lista blanca de direcciones IP - omite CAPTCHAs para direcciones IP o rangos de IP de confianza
- Configuración de persistencia - configura si mostrar CAPTCHAs siempre u omitirlos después de una respuesta exitosa (por formulario, por tipo de formulario o en todo el sitio)
- Modo de administración - muestra enlaces de gestión de CAPTCHA en formularios para administradores
- Mensajes personalizables - configura título, descripción y mensajes de error del CAPTCHA
- Opciones de validación sensible o insensible a mayúsculas
- Seguimiento de estadísticas - cuenta envíos de formularios bloqueados en el informe de estado
- Registro de respuestas incorrectas - opcionalmente registra respuestas CAPTCHA incorrectas
- Gestión de sesiones CAPTCHA con limpieza automática vía cron
- Integración con el caché de páginas de Drupal (deshabilita caché para páginas con CAPTCHAs)
- Elemento de formulario (#type => 'captcha') para inserción programática de CAPTCHA
- Soporte de migración desde Drupal 7
- API para desarrolladores con hooks para implementaciones de CAPTCHA personalizadas
Use Cases
Proteger el registro de usuarios de bots de spam
Habilita el CAPTCHA Point para user_register_form para requerir que los visitantes resuelvan un CAPTCHA matemático o de imagen antes de crear una cuenta. Esto bloquea efectivamente la creación automatizada de cuentas por bots de spam mientras mantiene una experiencia de usuario razonable para visitantes legítimos.
Asegurar formularios de contacto
Añade CAPTCHA a los formularios de contacto para prevenir mensajes de spam automatizados. El módulo incluye un CAPTCHA Point preconfigurado para el formulario de contacto personal, y puedes añadir puntos adicionales para formularios de contacto del sitio o personalizados.
Proteger formularios de comentarios
Crea CAPTCHA Points para formularios de comentarios (comment_*_form) para prevenir comentarios de spam. Considera usar configuraciones de persistencia para omitir el CAPTCHA después de una respuesta exitosa para mejorar la experiencia de usuario para comentaristas legítimos.
Protección de todo el sitio con lista blanca de IPs
Habilita 'Añadir desafíos CAPTCHA en todos los formularios' para máxima protección, luego añade las direcciones IP de tu oficina o IPs de socios de confianza a la lista blanca para que los usuarios internos no vean CAPTCHAs.
Protección de formularios personalizados
Crea CAPTCHA Points personalizados para cualquier formulario especificando su form_id. Puedes encontrar IDs de formularios habilitando el modo de administración, que muestra enlaces de gestión de CAPTCHA en todos los formularios mostrando su form_id.
Implementar tipos de CAPTCHA personalizados
Los desarrolladores pueden crear desafíos CAPTCHA personalizados implementando hook_captcha(). Devuelve los tipos disponibles en la operación 'list' y genera desafíos en la operación 'generate'. Esto permite la integración con servicios CAPTCHA de terceros o tipos de desafío personalizados.
Tips
- Otorga el permiso 'Omitir CAPTCHA' a administradores y roles de confianza para evitar que vean desafíos
- Usa el modo de administración durante la construcción del sitio para identificar fácilmente IDs de formularios y gestionar CAPTCHA Points
- Para formularios de comentarios, configura 'Mostrar en página separada' en la configuración del tipo de contenido para mejor eficiencia de caché
- En entornos de desarrollo, añade $settings['disable_captcha'] = TRUE; a settings.php para omitir todos los CAPTCHAs
- Considera cuidadosamente las configuraciones de persistencia - 'Omitir una vez exitoso' mejora la experiencia de usuario pero reduce la seguridad
- Usa la lista blanca de IPs para IPs conocidas como buenas (oficina, servidores CI) para omitir CAPTCHA
- Monitorea el informe de estado para estadísticas de envíos bloqueados si las estadísticas están habilitadas
- Limpia la caché de ubicación de CAPTCHA después de cambios significativos en la estructura del formulario
Technical Details
Admin Pages 4
/admin/config/people/captcha
Página principal de configuración del módulo CAPTCHA incluyendo tipo de desafío predeterminado, opciones globales, comportamiento de persistencia y personalización de mensajes.
/admin/config/people/captcha/captcha-points
Gestiona CAPTCHA Points - las asociaciones entre formularios y tipos de desafío CAPTCHA. Lista todos los CAPTCHA Points configurados con sus IDs de formulario, tipos de desafío y estado de habilitación.
/admin/config/people/captcha/captcha-points/add
Crea un nuevo CAPTCHA Point para proteger un formulario específico con un desafío.
/admin/config/people/captcha/examples
Página de vista previa que muestra ejemplos de todos los tipos de desafío CAPTCHA disponibles con su configuración actual. Útil para probar y comparar diferentes implementaciones de CAPTCHA.
Permissions 2
Hooks 3
hook_captcha
Hook principal para implementar tipos de desafío CAPTCHA. Los módulos implementan esto para proporcionar sus propios desafíos.
hook_captcha_alter
Permite a los módulos alterar un CAPTCHA después de que ha sido generado.
hook_captcha_placement_map
Define posiciones de ubicación personalizadas para elementos CAPTCHA en formularios específicos.
Troubleshooting 4
Esto típicamente ocurre con caché agresivo. El módulo CAPTCHA deshabilita el caché de páginas para páginas con CAPTCHAs, pero otros mecanismos de caché (Varnish, CDN) pueden causar problemas. Configura tu capa de caché para evitar el caché en formularios con CAPTCHAs, o considera usar un tipo de CAPTCHA que soporte caché como reCAPTCHA.
1. Verifica que el usuario no tenga el permiso 'Omitir CAPTCHA'. 2. Comprueba que el CAPTCHA Point existe y está habilitado. 3. Limpia la caché de ubicación de CAPTCHA. 4. Verifica si la IP está en la lista blanca.
Limpia la caché de ubicación de CAPTCHA desde la página de configuración. Si el problema persiste, implementa hook_captcha_placement_map() para especificar la ubicación exacta para ese formulario.
CAPTCHA deshabilita el caché de página para formularios con desafíos. Si necesitas caché, coloca los formularios protegidos con CAPTCHA en páginas separadas, usa carga de formularios por AJAX, o usa una implementación de CAPTCHA que soporte caché como reCAPTCHA.
Security Notes 6
- CAPTCHA proporciona protección contra ataques automatizados pero atacantes determinados pueden usar servicios de resolución de CAPTCHA
- El CAPTCHA matemático es menos seguro que los CAPTCHAs basados en imágenes pero más accesible
- Siempre combina CAPTCHA con otras medidas de seguridad como honeypots y limitación de velocidad
- Los IDs de sesión CAPTCHA se validan con tokens para prevenir ataques de reutilización
- Las IPs en lista blanca omiten toda validación CAPTCHA - usa esta función con cuidado
- El módulo registra ataques de reutilización de sesión CAPTCHA para monitoreo de seguridad