- Comprobaciones en el envío
- CAPTCHA por formulario
- Límites, listas y bloqueos temporales
- Registro, panel y prueba
- Formularios cubiertos, reglas y API
- Opciones y exenciones
- Multitienda, idiomas y licencia
- Un formulario de contacto saturado de mensajes
- Registros que crean cuentas fantasma
- Un boletín que pierde suscriptores
- Opiniones de productos sepultadas por spam
- Un módulo de negocio con su propio formulario
- Una agencia que gestiona varias tiendas
- ¿Debo quitar el CAPTCHA que ya tiene mi tema?
- ¿Puede el módulo bloquear un pedido?
- Mi formulario es personalizado, ¿es compatible?
- ¿Hace falta una cuenta con un proveedor de CAPTCHA?
- ¿Se bloqueará a mis clientes detrás de una dirección compartida?
- ¿Dónde se guardan los datos y durante cuánto tiempo?
- ¿Qué ocurre si caduca la licencia?
- ¿Garantiza el módulo cero spam?
Antispam para formularios PrestaShop: CAPTCHA y bloqueo de bots
El formulario de contacto recibe mensajes sobre criptomonedas, enlaces dudosos o «servicios SEO» escritos en un inglés deficiente. Los registros crean cuentas con direcciones inverosímiles. La lista del boletín se llena de personas que nunca pidieron recibirlo. Y, sin embargo, había un CAPTCHA activo. Ahí está el problema: un CAPTCHA protege la visualización del formulario, no su tratamiento. Un robot que envía directamente una petición POST al controlador de contacto, registro o boletín nunca carga el widget y deja su mensaje.
Antispam para formularios: CAPTCHA y bloqueo de bots coloca una comprobación en el servidor delante de cada formulario protegido. El envío se examina al principio de la petición, antes de que PrestaShop o el módulo del formulario lo trate: un envío rechazado no crea ninguna cuenta, no envía ningún mensaje, no suscribe a nadie al boletín y no publica ninguna opinión. El módulo funciona sin cuenta de terceros ni clave por defecto; un CAPTCHA externo sigue siendo una elección, formulario por formulario.
Esta guía explica qué hace el módulo, cómo instalarlo, cómo completar una primera configuración y cómo usarlo a diario.
Puntos fuertes:
- Protección en el envío: token firmado, campo trampa, tiempo mínimo y duplicados, comprobados antes de que se trate el formulario
- Límites que aguantan: ventana deslizante por dirección IP y por correo, bloqueos temporales, listas de bloqueo y de permitidos
- El CAPTCHA que elija por formulario: reCAPTCHA v2/v3, Cloudflare Turnstile, hCaptcha o Friendly Captcha, con prueba de claves
- Visibilidad: modo observación, panel de 30 días, registro de rechazos con motivo y herramienta «Probar mi protección»
- Sus formularios: los siete formularios nativos, reglas por controlador y una API PHP para módulos de terceros
Descubra el módulo y sus planes
Presentación
Por qué un CAPTCHA no basta
Un CAPTCHA clásico se ejecuta en el navegador del visitante. Pide una acción, verifica un token o calcula una puntuación y deja pasar el formulario. Un robot que conoce la URL del controlador no necesita navegador: envía los campos esperados directamente al servidor. El widget nunca se carga, el token nunca se solicita y el mensaje llega. Esto es especialmente cierto en los formularios de contacto, registro y boletín, cuyos controladores son públicos y fáciles de identificar.
Los módulos gratuitos suelen cubrir un solo proveedor y unos pocos formularios. No ofrecen límite de envíos, ni registro, ni forma de comprobar que un tema o un módulo de terceros muestra realmente los campos de protección. Cuando vuelve el spam, solo queda el mensaje en la bandeja de entrada, sin explicación.
Qué hace el módulo
El módulo se engancha al principio del tratamiento de una petición, cuando ya se conocen el cliente, la tienda y el idioma, pero antes de que se trate el formulario. Reconoce el envío de un formulario protegido por su controlador y su campo de envío, y aplica sus comprobaciones en un orden fijo: exenciones, lista de bloqueo de IP, bloqueo activo, campo trampa, token y tiempo mínimo, límite por dirección IP, comprobaciones del correo (lista de bloqueo, límite, dominio desechable, MX), duplicados y, por último, el CAPTCHA cuando el formulario tiene uno.
La primera comprobación que falla decide la respuesta. Un envío rechazado se detiene antes del código nativo: no se crea nada, no se envía nada, no se publica nada. El visitante ve un mensaje explícito, o el mensaje genérico que usted haya redactado, y los valores introducidos permanecen en el formulario. Los intentos rechazados se cuentan y se registran con su motivo.
Qué no hace el módulo
El módulo nunca filtra el pedido en sí: ni la cesta, ni el pago, ni la confirmación, ni las direcciones. El formulario del cliente del pedido puede protegerse, con umbrales deliberadamente amplios y sin tiempo mínimo, para no perder una venta. No sustituye a un cortafuegos de aplicaciones web, no bloquea una página entera y no promete cero spam: un spammer humano siempre puede rellenar correctamente un formulario. Por último, le ayuda a limitar los datos recogidos, pero no certifica el cumplimiento del RGPD ni sustituye un asesoramiento jurídico.
El panel: envíos permitidos y bloqueados, tasa de bloqueo y gráfica de 30 días.
Funcionalidades
Comprobaciones en el envío
Cada formulario protegido recibe un token firmado, un campo trampa invisible y un tiempo mínimo de cumplimentación.
- Token firmado: construido a partir del formulario, la tienda y la hora; caduca a las 12 horas por defecto. Un formulario abierto demasiado tiempo se renueva en la primera interacción, sin que el visitante tenga que recargar la página.
- Campo trampa: oculto fuera de la pantalla, nunca accesible con el teclado, con un nombre elegido al azar en la instalación. Un robot que rellena todos los campos también rellena este.
- Tiempo mínimo: de 0 a 30 segundos según el formulario. Los valores por defecto van de 1 segundo para el inicio de sesión a 3 segundos para contacto, registro y opiniones; el pedido se queda en 0.
- Duplicados: un contenido idéntico reenviado dentro de la ventana configurada se rechaza. Solo los envíos aceptados guardan una huella, así que una corrección después de un rechazo pasa.
- Red de seguridad: mientras un formulario nunca haya enviado los campos del módulo, la falta de token se registra sin bloquear. El panel señala la situación y la herramienta de prueba comprueba la página. En cuanto se ha visto un envío válido, la falta de token se rechaza.
CAPTCHA por formulario
Cuando quiera una verificación adicional, elija un proveedor para un formulario concreto:
- Google reCAPTCHA v2, en casilla o invisible
- Google reCAPTCHA v3, con un umbral de puntuación ajustable
- Cloudflare Turnstile
- hCaptcha, en versión normal, compacta o invisible
- Friendly Captcha
Usted introduce sus propias claves, el módulo nunca las vuelve a mostrar y un botón de prueba comprueba que se aceptan y que el dominio está autorizado. Por defecto, el script del proveedor solo se carga en las páginas que contienen un formulario protegido por ese proveedor, en la primera interacción con el formulario: ninguna página sin formulario paga el coste del script.
Dos ajustes enmarcan el comportamiento:
- Si el proveedor no responde, usted elige dejar pasar el envío, que se registra como sin comprobación, o rechazarlo.
- El consentimiento puede solicitarse antes de cargar el script, con el módulo Cookies RGPD u otra herramienta que exponga una API de consentimiento. Sin acuerdo, el formulario sigue protegido por las comprobaciones nativas, o muestra un mensaje si ha elegido pedir el consentimiento.
Los CAPTCHA externos tienen sus propias condiciones y su propia política de privacidad. Debe mencionarlos en su política y elegir el consentimiento adecuado.
Límites, listas y bloqueos temporales
Cada envío cuenta en una ventana deslizante por dirección IP y por dirección de correo, con umbrales configurables por formulario. Al superar el umbral, el envío se rechaza y se registra una marca. Tras tres marcas en 24 horas, la dirección se bloquea durante una hora en todos los formularios protegidos; estos valores son configurables y un bloqueo puede levantarse desde el panel. La navegación sigue siendo posible: el módulo nunca bloquea una página.
Las listas aceptan direcciones IPv4 e IPv6, rangos CIDR, direcciones de correo, dominios y patrones con comodín. Puede añadir una entrada a mano, importar un CSV y exportar las listas. Una dirección presente a la vez en la lista de bloqueo y en la de permitidos se permite: gana la lista de permitidos.
El módulo también incluye una lista de dominios desechables, que puede ampliar o recortar, y una comprobación MX opcional con caché para verificar que un dominio puede recibir correo.
Registro, panel y prueba
El panel resume los envíos permitidos, bloqueados, observados, sin comprobación y exentos, la tasa de bloqueo, una gráfica de 30 días, el detalle por formulario y por motivo, y las direcciones más bloqueadas.
El registro de intentos bloqueados indica, para cada rechazo, el formulario, el motivo, la fecha, la dirección enmascarada o con hash y el dominio de correo. Puede bloquear una dirección o un rango, permitir una dirección, bloquear un dominio o levantar un bloqueo con un clic, y exportar el registro a CSV. La purga es automática a los 30 días por defecto.
La herramienta Probar mi protección lee la página del formulario como un visitante, comprueba que los campos, el token y el script están presentes, envía un envío directo sin campos para verificar que se rechaza y comprueba las claves del proveedor elegido. El resultado queda visible hasta la siguiente prueba.
Cada rechazo se explica (campo trampa, enviado demasiado rápido, lista de bloqueo) y puede tratarse con un clic.
Formularios cubiertos, reglas y API
El módulo protege los siete formularios nativos de PrestaShop: contacto, creación de cuenta, inicio de sesión, formulario del cliente del pedido, contraseña olvidada, boletín y opiniones de productos. La creación de cuenta durante el pedido está incluida, con los umbrales propios del formulario del cliente.
Para los formularios de otros módulos hay dos soluciones:
- Una regla por controlador, con el nombre del formulario, la página o el controlador objetivo, el campo que marca el envío y, si hace falta, su valor, el campo de correo, los campos de contenido para los duplicados y el formato de respuesta esperado (página o JSON). Puede crear hasta 20 reglas por tienda. Una regla lista para usar cubre las alertas de disponibilidad de ps_emailalerts.
- La API PHP, documentada en el README del módulo, para que un módulo llame a los campos de protección y a las comprobaciones desde su propio código. El formulario aparece después en la lista con el nombre del módulo que lo llama.
Los elementos del pedido quedan excluidos: la cesta, el pago, la confirmación, las direcciones y los controladores de pago no pueden filtrarse con una regla.
Un modo, un CAPTCHA y límites para cada formulario, incluidas las reglas de otros módulos.
Opciones y exenciones
La verificación del correo en el registro está desactivada por defecto. Cuando se activa, el registro en la página de creación de cuenta recibe un enlace firmado y caducable; la cuenta queda pendiente hasta que se confirma el enlace, puede pedir uno nuevo y no puede iniciar sesión antes de la confirmación. La tienda nunca retiene una cuenta si no envía correos o si el envío falla, y una cuenta pendiente sigue siendo accesible si el módulo se desactiva o la licencia caduca.
Los empleados conectados al panel, los rastreadores de motores de búsqueda verificados por DNS, los grupos de clientes que exima, las direcciones de la lista de permitidos, los clientes conectados según el formulario y las tareas programadas no se comprueban. Estas exenciones se ajustan en la configuración, salvo las direcciones permitidas, que se gestionan en las listas.
Multitienda, idiomas y licencia
Los ajustes, formularios, reglas, registro y estadísticas son propios de cada tienda; las entradas de las listas pueden ser de una tienda o compartidas. La interfaz y los mensajes existen en francés, inglés, español, italiano y polaco. Los temas Classic y Hummingbird funcionan sin modificación, no se escribe ningún archivo de tema ni se crea ningún override. La desinstalación conserva los datos por defecto, con una opción para eliminarlos.
El módulo funciona con una licencia WePresta válida. Sin licencia válida se desactiva: los formularios dejan de comprobarse, no se muestra ningún CAPTCHA y no se registra nada, así que el spam puede volver. Sus ajustes, listas y registro se conservan, y el módulo se reactiva en cuanto la licencia es válida.
Instalación
- Compruebe los requisitos: PrestaShop 1.7.8, 8.0+ o 9.0+, PHP 7.4 o superior.
- Instale el módulo desde el gestor de módulos con el archivo ZIP proporcionado, o copie su carpeta en
modules/e instálelo desde la lista de módulos. - En la instalación se crean los siete formularios nativos para cada tienda en modo Protegido, sin CAPTCHA externo, con sus umbrales por defecto. Se añade la lista de dominios desechables y se crean las tablas del módulo.
- Abra la página Configurar del módulo y active su licencia WePresta. Mientras la licencia no sea válida, el módulo permanece desactivado y los formularios no se comprueban.
- Programe la tarea diaria de mantenimiento, con la dirección indicada en la configuración o la línea de comandos proporcionada. La tarea purga el registro, los contadores y los bloqueos caducados.
- Compruebe los permisos de sus empleados: consulta, gestión y datos son tres derechos distintos, controlados en el servidor.
Primera configuración
Tras la instalación, no pase directamente a proteger todos los formularios. El módulo se entrega con umbrales razonables, pero su tienda tiene sus propias costumbres.
- Active la licencia y compruebe que el estado del módulo es «Activado» en el panel.
- Pase los formularios a observación con «Observar todo». Todas las comprobaciones se ejecutan, no se rechaza nada y el registro guarda lo que se habría bloqueado.
- Déjelo funcionar unos días y luego abra el registro y el panel: los motivos le dicen si el bloqueo afectaría a robots o a clientes. Preste especial atención a las direcciones compartidas por varios visitantes, como las de una empresa o un operador móvil.
- Pruebe la página de cada formulario con «Probar mi protección». La prueba confirma la presencia de los campos, el token y el script, y comprueba que un envío directo sin campos se rechaza.
- Active la protección formulario por formulario, empezando por contacto y boletín, y después registro, inicio de sesión y opiniones. Deje el pedido con sus umbrales amplios.
- Añada un CAPTCHA solo si es necesario, en un formulario expuesto, después de introducir sus claves y comprobar la prueba. Empiece por una variante invisible para no añadir fricción.
- Configure las listas: añada las direcciones de sus socios y de sus herramientas de supervisión a la lista de permitidos antes de apretar los límites.
- Compruebe la tarea programada: sin ella, el registro y los contadores no se purgan y los bloqueos caducados permanecen.
- Actualice su política de privacidad si activa un CAPTCHA externo y mencione el proveedor elegido.
Uso diario
El panel es la vista de conjunto: envíos permitidos y bloqueados, tasa de bloqueo, formularios más atacados, motivos más frecuentes y direcciones más bloqueadas. Un pico de bloqueo en un formulario se detecta de inmediato.
El registro de intentos bloqueados es la vista de acción. Para cada rechazo, puede bloquear la dirección o su rango, permitir la dirección, bloquear el dominio de correo o levantar un bloqueo. Estas acciones son inmediatas y se aplican a todos los formularios protegidos de la tienda. El registro puede exportarse a CSV para un análisis más profundo y purgarse según el plazo de conservación elegido.
La página Formularios muestra, para cada formulario, su modo, su proveedor de CAPTCHA, su tiempo mínimo, sus límites, la fecha del último envío y el estado de los campos vistos. Un formulario que nunca ha visto los campos del módulo se señala: a menudo significa que un tema o un módulo dibuja el formulario de otra manera, y la red de seguridad evita entonces perder mensajes mientras lo corrige.
La página Listas agrupa las listas de direcciones IP, de correos, los dominios desechables y los bloqueos activos. La importación CSV acepta un archivo UTF-8 con las columnas value y note, hasta 10 000 líneas y 2 MB; el informe indica las líneas añadidas, ya presentes y rechazadas.
La página Cuentas por verificar aparece cuando la verificación de correo está activa o hay una cuenta pendiente. Permite reenviar un enlace, confirmar o eliminar una cuenta pendiente.
La página Registro de acciones registra las acciones de los empleados: ajustes modificados, formularios cambiados, listas importadas, bloqueos levantados. Útil cuando varias personas administran la tienda.
Casos de uso
Un formulario de contacto saturado de mensajes
El formulario de contacto recibe cada noche mensajes idénticos, a menudo con un enlace. El CAPTCHA del tema no cambia nada: los robots envían directamente. El módulo rechaza los envíos sin token, atrapa el campo trampa y bloquea las direcciones que insisten. El registro muestra el motivo de cada rechazo y permite bloquear un rango entero con un clic.
Registros que crean cuentas fantasma
Los registros automatizados contaminan la lista de clientes y falsean las estadísticas. El módulo aplica el tiempo mínimo, el límite por IP y por correo, la lista de dominios desechables y, si hace falta, la comprobación MX. La verificación del correo en el registro impide que una cuenta sin confirmar inicie sesión.
Un boletín que pierde suscriptores
Las suscripciones masivas al boletín pueden provocar quejas y dañar la entregabilidad. Los límites por dirección y por correo, la detección de duplicados y las listas de bloqueo reducen el volumen, mientras que la lista de permitidos protege las direcciones de sus socios.
Opiniones de productos sepultadas por spam
El formulario de opiniones está expuesto y los robots lo conocen. El módulo lo protege como a los demás, con un tiempo mínimo de 3 segundos y una ventana de duplicados de 60 minutos por defecto. El script del módulo desactiva el campo trampa vacío para que el formulario de opiniones siga funcionando con su script nativo.
Un módulo de negocio con su propio formulario
Un módulo de presupuestos, de devolución de llamada o de alertas de disponibilidad tiene su propio formulario y su propio controlador. Una regla por controlador basta para protegerlo sin tocar su código; si no, la API PHP permite al módulo llamar a las comprobaciones desde su propio código.
Una agencia que gestiona varias tiendas
Cada tienda conserva sus ajustes, formularios, listas, registro y estadísticas. Una agencia puede aplicar la misma política sin mezclar datos de clientes y comprobar tienda por tienda qué se bloquea realmente.
Requisitos y límites
- PrestaShop 1.7.8, 8.0+ y 9.0+, en los temas Classic y Hummingbird; PHP 7.4 o superior.
- No se exige ninguna cuenta de pago: la protección nativa funciona sin clave ni suscripción. Los proveedores de CAPTCHA son opcionales y requieren sus propias claves; Cloudflare Turnstile requiere una cuenta de Cloudflare.
- Se recomienda una tarea programada diaria para purgar el registro, los contadores y los bloqueos caducados; el mantenimiento también puede ejecutarse en el primer acceso al panel del módulo o en el primer envío comprobado del día.
- Las verificaciones de CAPTCHA, la comprobación MX y la verificación de rastreadores usan llamadas de red salientes. Sin red, se aplica el comportamiento elegido para el proveedor y una comprobación MX fallida deja pasar el envío.
- El módulo no puede prometer cero spam: reduce con fuerza los envíos automatizados y ofrece medios para ver y ajustar. Un spammer humano siempre puede pasar.
- Un límite demasiado estricto puede molestar a visitantes detrás de una misma dirección. Use el modo observación, las listas de permitidos y las exenciones antes de apretar los umbrales.
- El módulo ayuda a limitar los datos recogidos, pero no certifica el cumplimiento del RGPD ni sustituye un asesoramiento jurídico. Los CAPTCHA externos tienen sus propias condiciones y política de privacidad, que debe mencionar en la suya.
FAQ
¿Debo quitar el CAPTCHA que ya tiene mi tema?
El módulo no retira un CAPTCHA añadido por su tema. Puede dejarlo, pero evite acumular dos CAPTCHA visibles en el mismo formulario: añade fricción sin beneficio. Si configura un proveedor en el módulo, su script puede sumarse al del tema; compruebe el resultado en la tienda antes de activarlo.
¿Puede el módulo bloquear un pedido?
No. El módulo nunca filtra el pedido en sí: ni la cesta, ni el pago, ni la confirmación, ni las direcciones. Solo puede comprobarse el formulario del cliente del pedido, con umbrales amplios y sin tiempo mínimo. Los elementos del pedido quedan excluidos de las reglas.
Mi formulario es personalizado, ¿es compatible?
Sí, de dos formas. Una regla por controlador describe el campo que marca el envío y el formato de respuesta esperado, sin modificar el código del módulo de terceros. La API PHP permite al módulo de terceros llamar a los campos de protección y a las comprobaciones desde su propio código. Un formulario que no pasa por un controlador PrestaShop identificable no puede protegerse con una regla.
¿Hace falta una cuenta con un proveedor de CAPTCHA?
No. Las comprobaciones nativas, el token, el campo trampa, el tiempo mínimo, los límites y las listas funcionan sin ninguna cuenta. Solo se necesita una cuenta si elige un proveedor externo, y cada proveedor tiene sus propias condiciones.
¿Se bloqueará a mis clientes detrás de una dirección compartida?
Una dirección compartida por varios visitantes puede alcanzar el límite más rápido que una dirección individual. Por eso existen el modo observación, los umbrales por formulario y la lista de permitidos. Empiece observando, revise los envíos que se habrían bloqueado y ajuste el límite o añada la dirección a la lista de permitidos si es necesario.
¿Dónde se guardan los datos y durante cuánto tiempo?
En las tablas del módulo, en su servidor. El registro conserva el formulario, el motivo, la fecha, la dirección enmascarada o una huella con hash y el dominio de correo, nunca la dirección completa en claro por defecto. La purga es automática a los 30 días por defecto, con un plazo configurable. Los hooks RGPD permiten exportar o borrar los datos, y la desinstalación conserva los datos salvo que pida su eliminación.
¿Qué ocurre si caduca la licencia?
El módulo se desactiva: los formularios dejan de comprobarse, no se muestra ningún CAPTCHA y no se registra nada, así que el spam puede volver. Sus ajustes, listas y registro se conservan, y el módulo se reactiva en cuanto la licencia es válida. La tienda sigue accesible en todos los casos.
¿Garantiza el módulo cero spam?
No, y ningún módulo puede prometerlo. Reduce con fuerza los envíos automatizados al detener las peticiones que no cargaron la página o que no superan las comprobaciones, y le da medios para ver qué se bloquea y ajustar. Un spammer humano siempre puede rellenar correctamente un formulario; el módulo no sustituye la moderación ni su política de privacidad.
Soporte
Para cualquier ayuda, contacte con nosotros desde su área de cliente WePresta o por correo electrónico a mail@wepresta.shop, según la opción de soporte de su plan.
Changelog
Versión 1.0.0
- Compruebe cada envío en el servidor antes de que PrestaShop trate el formulario: token firmado, campo trampa, tiempo mínimo y duplicados.
- Proteja los siete formularios nativos desde la instalación, sin cuenta de terceros ni clave: contacto, creación de cuenta, inicio de sesión, pedido, contraseña, boletín y opiniones.
- Limite los envíos por dirección IP y por dirección de correo con una ventana deslizante configurable por formulario, y bloquee temporalmente las direcciones que insisten.
- Gestione listas de bloqueo y de permitidos para direcciones IPv4 e IPv6, rangos CIDR, correos, dominios y patrones con comodín, con importación y exportación CSV.
- Incluya una lista de dominios desechables y una comprobación MX opcional con caché.
- Elija un CAPTCHA por formulario: reCAPTCHA v2/v3, Cloudflare Turnstile, hCaptcha o Friendly Captcha, con prueba de claves y comportamiento definido si el proveedor no responde.
- Solicite el consentimiento antes de cargar el script del proveedor, con el módulo Cookies RGPD o una API de consentimiento.
- Observe los envíos sin rechazarlos y active después la protección formulario por formulario.
- Siga los envíos permitidos, bloqueados, observados, sin comprobación y exentos, la tasa de bloqueo y una gráfica de 30 días.
- Consulte el registro de intentos bloqueados con motivo, dirección enmascarada y dominio de correo, actúe con un clic y exporte a CSV.
- Pruebe la página de un formulario con «Probar mi protección»: campos, token, script y envío directo sin campos.
- Añada una regla por controlador para un formulario de otro módulo, con una regla lista para ps_emailalerts, o utilice la API PHP.
- Verifique opcionalmente el correo en el registro con un enlace firmado y caducable, sin retener una cuenta si el envío falla.
- Exima a los empleados, los rastreadores de motores de búsqueda verificados, los grupos de clientes, las direcciones permitidas, los clientes conectados y las tareas programadas.
- Trabaje en multitienda, en francés, inglés, español, italiano y polaco, en los temas Classic y Hummingbird.
- Utilice el módulo en PrestaShop 1.7.8, 8.0+ y 9.0+ con PHP 7.4 mínimo.