> ## Documentation Index
> Fetch the complete documentation index at: https://formpaste.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Prevenir spam

> Cómo aprovechar al máximo el filtrado de spam heurístico de Formpaste - sin acertijos para tus visitantes.

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](/docs/es/features/spam-filtering) 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:

```html theme={null}
<input type="text" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
```

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](/docs/es/framework-snippets) 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.

```html theme={null}
<input type="hidden" name="_ts" value="1720700000000">
```

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](/docs/es/features/custom-domains)
  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](/docs/es/features/custom-domains).

## 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](https://app.formpaste.com) 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](/docs/es/features/quarantine-rescue) 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.

<CardGroup cols={2}>
  <Card title="Filtrado de spam" icon="shield" href="/docs/es/features/spam-filtering">
    Qué se verifica y cómo funciona la puntuación.
  </Card>

  <Card title="Cuarentena" icon="box-archive" href="/docs/es/features/quarantine">
    A dónde van los envíos marcados, y cómo revisarlos.
  </Card>

  <Card title="Lista permitida de dominios" icon="globe" href="/docs/es/features/custom-domains">
    La verdadera frontera de seguridad detrás de un access\_key público.
  </Card>

  <Card title="Referencia de errores" icon="triangle-exclamation" href="/docs/es/reference/error-table">
    Incluyendo `rate_limited` y otros códigos relacionados con spam.
  </Card>
</CardGroup>
