Ir al contenido

blockHeadless y lista de bloqueo

Además de los orígenes permitidos y Turnstile, Frontmail tiene dos filtros ligeros que puedes activar en el SDK, en el panel o en ambos. Los ajustes del panel están en la página Seguridad (los pueden cambiar los propietarios y administradores).

Rechaza los envíos desde navegadores automatizados sin interfaz (Puppeteer, Playwright, Selenium y similares), que suelen usar los bots de spam de formularios.

init({ publicKey: 'pk_4f2a…', blockHeadless: true });
  • En el SDK, la comprobación se ejecuta en el navegador antes de hacer ninguna solicitud: send() se rechaza con un BlockedError con el código headless_blocked. Sin solicitud, sin crédito.
  • En Seguridad → Protección contra abusos → Bloquear navegadores headless, la API también rechaza las solicitudes con clave pública cuyo user agent identifica un navegador headless o automatizado (HeadlessChrome, Puppeteer, Playwright, Selenium, PhantomJS, jsdom…). Usa ambos.

Esto no afecta a los usuarios legítimos. A tus propias pruebas end-to-end sí: en las pruebas, envía con una clave privada o desactiva la opción en los entornos de prueba.

Una lista de bloqueo rechaza los envíos cuyo destinatario (o el valor de un parámetro elegido) coincide con una entrada. Usos típicos: la dirección de un spammer persistente, dominios de correo desechables, un competidor que rastrea tus formularios.

init({
publicKey: 'pk_4f2a…',
blockList: {
list: ['spam@example.net', 'mailinator.com'],
watchVariable: 'email', // parámetro o campo del formulario que se comprueba
},
});
  • Los valores se comparan sin distinguir mayúsculas y minúsculas y tras eliminar los espacios de los extremos. Una entrada sin @ (o que empieza por @, como @mailinator.com) coincide con todas las direcciones de ese dominio; las demás entradas coinciden exactamente con una dirección de correo o con el valor vigilado.
  • En el SDK, la comprobación se ejecuta antes de la solicitud; una coincidencia se rechaza con un BlockedError con el código recipient_blocked.
  • En Seguridad → Lista de bloqueo, los propietarios y administradores introducen los Valores bloqueados (uno por línea, hasta 1000) y, opcionalmente, un Parámetro que se comprueba (p. ej. email; también funcionan las rutas con puntos). La API aplica la lista a todas las solicitudes (con clave pública o privada, incluidos los clientes desactualizados o los scripts que no usan el SDK) antes de gastar ningún crédito. Comprueba los destinatarios renderizados (To/CC/BCC) y el valor del parámetro indicado.

La lista del SDK se ve en el código fuente de tu página; guarda las entradas sensibles solo en la lista del panel.

Los SDK también pueden impedir que un mismo navegador envíe con demasiada frecuencia; por ejemplo, cuando un visitante hace doble clic en el botón de envío:

init({ publicKey: 'pk_4f2a…', limitRate: { id: 'contact', throttle: 10_000 } });

Un segundo envío en menos de 10 segundos desde la misma página (o con el mismo id) se rechaza localmente con un BlockedError con el código rate_limited. Es una comodidad, no una medida de seguridad: consulta Límites de solicitudes para los límites del servidor.

Seguridad → Protección contra abusos → Parámetros estrictos rechaza las solicitudes que contienen parámetros que el esquema de la plantilla no define (consulta Parámetros). Los bots que rellenan todos los campos de un formulario, incluidos los inventados, se detienen antes de gastar créditos.