Skip to main content
Formpaste nunca le pide a un visitante (ni a un agente enviando en su nombre) que resuelva un CAPTCHA. Eso no es una función faltante, es el punto. Esta guía cubre cómo funciona realmente el filtrado heurístico y qué puedes hacer para aprovecharlo al máximo, sin agregar nunca un acertijo a tu formulario.

Por qué no hay acertijos de CAPTCHA

Los CAPTCHAs intercambian reducción de spam por fricción: ralentizan o bloquean a visitantes reales, se rompen para lectores de pantalla y otras tecnologías de asistencia, y cada vez más ni siquiera detienen a los bots, los servicios modernos de resolución los vencen fácilmente. También bloquean exactamente al público para el que está construido Formpaste: un agente de IA que envía legítimamente un formulario en nombre de un humano no debería tener que resolver un acertijo diseñado para detectarlo como no humano. En cambio, cada envío se puntúa mediante heurísticas económicas e integradas, sin llamadas a APIs externas, sin costo por envío, sin ningún desafío visible. Consulta Filtrado de spam para la mecánica completa; esta guía trata sobre usarlas bien.

1. Conecta el honeypot (botcheck)

Lo de mayor valor que puedes hacer es incluir el campo botcheck y ocultarlo correctamente:
Los visitantes reales nunca ven ni completan este campo, así que si llega con cualquier valor, el envío se pone en cuarentena. Dos detalles importan para que esto realmente funcione:
  • Ocúltalo con CSS (display:none), no con type="hidden". Los bots poco sofisticados que específicamente omiten los inputs type="hidden" igual completarán un input text que solo está estilizado como invisible, eso es lo que los atrapa.
  • No lo elimines “porque nada lo completa”. Un campo botcheck vacío que se envía exitosamente junto a datos reales es exactamente lo que debería pasar con un visitante humano, es silencioso y gratuito. Solo importa cuando algo más, un bot, o una extensión de navegador que autocompleta cada campo que encuentra, lo llena.
Cada snippet de framework en la página de Snippets por framework ya tiene botcheck conectado; si armaste tu formulario a mano en lugar de copiar uno, agrégalo.

2. Agrega el campo de tiempo (_ts)

Un campo opcional _ts lleva la marca de tiempo de cuando se renderizó tu formulario. Un envío que llega de forma implausiblemente rápida, más rápido de lo que un humano podría plausiblemente haber leído el formulario y escrito una respuesta, se puntúa como sospechoso. Esta es una forma económica de detectar envíos programados que se saltan el renderizado por completo y simplemente envían un payload con POST.
Establece su valor a la marca de tiempo actual en el momento del renderizado (por ejemplo, Date.now() en JavaScript, o el momento de renderizado del servidor para una página estática).

3. Deja que el resto se ejecute automáticamente

Una vez que access_key está conectado, las heurísticas restantes no necesitan configuración y se ejecutan en cada envío:
  • Densidad de enlaces: un mensaje repleto de varias URLs se puntúa como spam probable.
  • Límite de tasa: los envíos repetidos desde la misma fuente en una ventana corta se limitan, independientemente del contenido.
  • Detección de correo desechable / duplicado: los envíos de proveedores de correo desechable, y los envíos repetidos casi idénticos, se marcan. Si tu caso de uso legítimamente espera direcciones desechables, activa allow_disposable_email para ese formulario en Lista permitida de dominios en lugar de luchar contra el valor por defecto.

4. Restringe la lista permitida de dominios

access_key está diseñada para vivir en el código fuente de una página pública, no es un secreto, y CORS en /submit es intencionalmente permisivo para que cualquier origen pueda enviar un POST. La lista de dominios permitidos de cada formulario es la verdadera frontera que evita que alguien copie tu clave y dirija tráfico no relacionado (incluido spam) a tu bandeja de entrada. Una lista vacía acepta cualquier origen, bien mientras estás configurando las cosas, pero vale la pena restringirla a tu dominio o dominios reales una vez que el formulario esté en producción. Consulta Lista permitida de dominios.

5. Trata la cuarentena como una cola de revisión, no un agujero negro

Nada que llegue a un access_key válido se descarta en silencio. Cualquier cosa que se puntúe como sospechosa llega a la pestaña Spam del formulario en el panel en lugar de a tu inbox, revísala periódicamente en busca de falsos positivos. En Free, la cuarentena es de solo lectura, así que un envío legítimo que fue marcado incorrectamente necesita que el visitante lo reenvíe una vez que hayas arreglado lo que activó la heurística (normalmente un problema de conexión del botcheck o un ajuste de correo desechable demasiado estricto). Pro agrega un rescate de “no spam” de un clic que lo reentrega directamente.

Lo que esto no hace

La puntuación heurística reduce el volumen de spam; no garantiza cero. Un atacante decidido y bien financiado que renderiza tu formulario en un navegador headless real, espera una cantidad de tiempo plausible, y envía un envío a la vez desde una IP residencial todavía puede lograrlo, de la misma forma que podría vencer un CAPTCHA. El objetivo es elevar el costo de spamear un formulario muy por encima del costo de la alternativa (una bandeja de entrada real sin ningún filtrado), no construir un muro impenetrable.

Filtrado de spam

Qué se verifica y cómo funciona la puntuación.

Cuarentena

A dónde van los envíos marcados, y cómo revisarlos.

Lista permitida de dominios

La verdadera frontera de seguridad detrás de un access_key público.

Referencia de errores

Incluyendo rate_limited y otros códigos relacionados con spam.