WebBlocks CMS ofrece una única canalización de protección local para los formularios dirigidos a visitantes. Los bloques nativos Contact Form y Comments la utilizan directamente, y los plugins como WebBlocks Forms resuelven el mismo servicio desde el contenedor del CMS. Por tanto, las señales acompañan a un sitio entre distintos tipos de formulario, en lugar de que cada formulario se defienda de forma aislada.
La canalización no realiza solicitudes de red y no requiere CAPTCHA, clave de API, daemon, servicio de huellas digitales del navegador, extensión opcional de PHP ni producto de moderación de terceros. Utiliza la base de datos de la aplicación, la caché configurada de Laravel y APP_KEY.
Modelo de procesamiento
La protección se organiza deliberadamente en capas:
- La validación de Laravel y CSRF rechazan normalmente las solicitudes mal formadas o de origen cruzado.
- El renderizador proporciona una identidad de formulario firmada, una marca de tiempo y un campo señuelo generado.
- Una prueba no válida, un campo señuelo rellenado o un envío anterior al tiempo mínimo del formulario siguen la ruta de éxito genérica, sin almacenamiento ni entrega.
- Los envíos válidos se puntúan mediante señales de contenido, tiempo, repetición, remitente, origen, prefijo de red, formulario y reputación aprendida.
- La puntuación se convierte en
allow,quarantineospam. - El formulario propietario almacena el registro para revisión; solo
allowpuede ejecutar acciones de entrega.
Los visitantes nunca reciben la puntuación, los motivos, el resultado de la notificación ni la confirmación de que una trampa los ha reconocido. La respuesta genérica impide que los bots utilicen el endpoint para ajustar sus cargas útiles.
Decisiones y entrega
inspect() devuelve score, reasons únicos, decision y el indicador de compatibilidad is_spam. Los umbrales predeterminados son:
En Contact Messages, la cuarentena y el spam suprimen la notificación por correo electrónico. En WebBlocks Forms, suprimen todas las acciones, incluidas la notificación comercial, la respuesta automática, el webhook y la integración opcional con Campaigns. Los comentarios nunca se publican automáticamente: los comentarios limpios y en cuarentena permanecen pendientes, mientras que una decisión de spam se almacena como spam.
Señales y ponderaciones predeterminadas
Las señales son acumulativas y la puntuación final está limitada a 100. Por tanto, varias señales débiles pueden poner una solicitud en cuarentena sin depender de una única regla frágil basada en palabras clave.
Las direcciones de correo electrónico se eliminan antes de crear la huella del contenido, por lo que la rotación de remitentes no oculta un mensaje repetido y cambiar una dirección no crea una nueva copia de la campaña.
Ámbito, ventanas y privacidad
Cada contador y consulta de reputación está limitado al sitio. La actividad de un sitio alojado no puede aumentar la puntuación de otro.
- Las claves de caché de IP exacta, remitente, contenido, formulario y red utilizan HMAC con clave; los valores enviados no aparecen en las claves de caché.
- Las direcciones IPv4 se reducen a
/24y las IPv6 a/64antes del HMAC del prefijo de red. Esto detecta hosts rotatorios sin almacenar la dirección ni usar geolocalización. - Los umbrales de red son mayores que los de IP exacta para no penalizar demasiado pronto a oficinas, centros educativos, pasarelas de operadores y otras redes compartidas.
- Las filas de similitud contienen un HMAC exacto, un SimHash de 64 bits, contadores y marcas de tiempo, no el mensaje enviado.
- Las métricas diarias solo contienen el sitio, la fecha, la superficie y los recuentos agregados de decisiones.
La tabla propietaria de envíos puede seguir almacenando la información que su producto necesita; por ejemplo, un Contact Message almacena la dirección proporcionada por el visitante y los datos del origen. Ese registro del producto es independiente de la reputación y las métricas de protección.
Reputación aprendida y correcciones
wbcms_submission_fingerprints conserva reputación local limitada al sitio. Las coincidencias exactas tienen el mayor efecto; los duplicados aproximados utilizan una comparación SimHash acotada sobre, como máximo, las 200 huellas vistas más recientemente durante los 90 días anteriores.
Marcar como spam un Contact Message o un envío de WebBlocks Forms registra comentarios spam. Restaurar un elemento en spam o cuarentena a New, Read o Replied registra comentarios ham y compensa falsos positivos posteriores. Archivar es una acción organizativa y no enseña nada. Los comentarios solo afectan a envíos posteriores; no reclasifican retroactivamente los registros existentes.
Los plugins llaman a recordOutcome($siteId, $validatedAnswers, 'spam') o utilizan ham para una corrección.
Resumen administrativo de treinta días
Cada envío puntuado incrementa una fila de wbcms_submission_daily_totals correspondiente a su sitio, fecha y superficie. Contact Messages muestra el resumen móvil de los sitios a los que puede acceder el administrador que ha iniciado sesión. WebBlocks Forms lo muestra para el sitio seleccionado.
- Comprobados: todos los envíos válidos que llegaron a la puntuación;
- Permitidos: se permitió la entrega normal;
- En cuarentena: almacenados para revisión con la entrega suprimida;
- Spam: almacenados como spam con la entrega suprimida.
Las solicitudes descartadas por una trampa o demasiado rápidas nunca llegan a la puntuación, no se almacenan y no aparecen en estos totales. El resumen es contexto operativo, no un recuento de visitantes ni un informe de precisión. summary($siteIds, $days) devuelve ceros mientras la tabla de métricas no esté instalada, lo que mantiene seguras las pantallas de plugins durante una actualización incompleta.
Referencia de configuración
Todos los ajustes son anulaciones opcionales mediante variables de entorno. Los valores predeterminados son conservadores.
Mantenga el umbral de cuarentena por debajo del umbral de spam, el primer umbral de cada ráfaga por debajo del segundo y las ventanas con valores positivos. Después de cambiar valores de entorno en una instalación con la configuración en caché, ejecute php artisan optimize:clear.
Contrato de prueba del renderizador
SubmissionProof vincula sus valores tanto a la superficie como a la identidad del formulario. Los renderizadores envían _form_stamp, _form_check_name y el campo vacío devuelto por fieldName($surface, $form). Los valores ausentes, alterados, fechados en el futuro o procedentes de otro formulario provocan un fallo seguro.
La prueba no es un token de un solo uso: las cachés de página completa y CDN pueden servir el mismo formulario a varios visitantes reales. Su finalidad es vincular el formulario, garantizar la integridad, nombrar el campo señuelo y medir el tiempo transcurrido, no impedir la repetición.
Contrato de integración de plugins
Los plugins siguen siendo responsables de la validación, autorización, limitación de frecuencia, almacenamiento, nombres de estado y renderizado. Un plugin compatible debe:
- renderizar la prueba firmada y un campo señuelo generado vacío;
- descartar silenciosamente las pruebas no válidas, las trampas rellenadas y los envíos por debajo de su mínimo estricto;
- pasar a
inspect()únicamente respuestas validadas; - utilizar el ID real del sitio e identidades estables de superficie y formulario;
- conservar la puntuación y los motivos junto con su envío;
- ejecutar acciones solo cuando la decisión sea
allow; - enviar a
recordOutcome()las correcciones de spam/ham del operador; - usar
summary()en lugar de consultar directamente las tablas de métricas del CMS.
No copie el sistema de puntuación en un plugin, no debilite los umbrales de toda la instalación, no exponga códigos de motivo a los visitantes ni transmita respuestas a otro servicio. WebBlocks Forms es la implementación de referencia.
Orientación operativa
- Revise periódicamente la cuarentena y el spam; el ciclo de aprendizaje depende de correcciones de estado deliberadas.
- Marque las campañas reales como Spam. Utilice Archivar solo para clasificar, ya que no entrena la reputación.
- Devuelva los falsos positivos a un estado legítimo del flujo de trabajo.
- Cambie los umbrales únicamente después de observar el tráfico del sitio. Unos recuentos menores de remitente o red pueden perjudicar el tráfico de oficinas compartidas o eventos.
- Es esperable un aumento de Comprobados sin correos en la bandeja de entrada cuando la cuarentena o el spam suprimen la entrega. La notificación y el estado editorial permanecen separados.
- Haga una copia de seguridad antes de cambiar
APP_KEY. La rotación hace que las huellas HMAC existentes y las claves de caché activas no sean comparables con las nuevas hasta que caduque la influencia anterior.