> ## 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.

# Spam verhindern

> So holst du das Beste aus der heuristischen Spam-Filterung von Formpaste heraus, ganz ohne Rätsel für deine Besucher.

Formpaste bittet einen Besucher (oder einen Agenten, der in dessen Auftrag absendet)
niemals, ein CAPTCHA zu lösen. Das ist kein fehlendes Feature, das ist der Punkt. Diese
Anleitung erklärt, wie die heuristische Filterung tatsächlich funktioniert und was du
tun kannst, um das Beste daraus herauszuholen, ohne jemals ein Rätsel zu deinem Formular
hinzuzufügen.

## Warum keine CAPTCHA-Rätsel

CAPTCHAs tauschen Spam-Reduktion gegen Reibung: Sie verlangsamen oder blockieren echte
Besucher, sie funktionieren nicht mit Screenreadern und anderer assistiver Technologie,
und zunehmend stoppen sie nicht einmal mehr Bots, moderne Lösungsdienste überwinden die
meisten davon günstig. Außerdem blockieren sie genau die Zielgruppe, für die Formpaste
gebaut ist: Ein KI-Agent, der legitim im Auftrag eines Menschen ein Formular absendet,
sollte kein Rätsel lösen müssen, das dafür entworfen wurde, ihn als nicht-menschlich zu
erkennen. Stattdessen wird jede Einsendung durch günstige Inline-Heuristiken bewertet,
kein externer API-Aufruf, keine Kosten pro Einsendung, keine sichtbare Herausforderung.

Die vollständige Mechanik findest du unter [Spam-Filterung](/docs/de/features/spam-filtering);
in dieser Anleitung geht es darum, sie gut zu nutzen.

## 1. Den Honeypot verdrahten (`botcheck`)

Das Wertvollste, was du tun kannst, ist, das Feld `botcheck` einzubinden und es korrekt
zu verstecken:

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

Echte Besucher sehen oder füllen dieses Feld nie aus. Kommt es also mit irgendeinem Wert
an, wird die Einsendung unter Quarantäne gestellt. Zwei Details sind entscheidend, damit
das tatsächlich funktioniert:

* **Verstecke es mit CSS (`display:none`), nicht mit `type="hidden"`.** Unraffinierte
  Bots, die gezielt `type="hidden"`-Felder überspringen, füllen trotzdem ein
  `text`-Input aus, das lediglich unsichtbar gestylt ist, genau das fängt sie.
* **Entferne es nicht "weil ja nichts drin steht".** Ein leeres `botcheck`-Feld, das
  zusammen mit echten Daten erfolgreich abgesendet wird, ist genau das, was bei einem
  menschlichen Besucher passieren soll, es ist unauffällig und kostenlos. Es zählt nur,
  wenn etwas anderes, ein Bot oder eine Browser-Erweiterung, die jedes auffindbare Feld
  automatisch ausfüllt, es befüllt.

Jeder Framework-Snippet auf der Seite [Framework-Snippets](/docs/de/framework-snippets) hat
`botcheck` bereits verdrahtet; falls du dein Formular stattdessen selbst gebaut hast,
füge es hinzu.

## 2. Das Timing-Feld hinzufügen (`_ts`)

Ein optionales Feld `_ts` trägt den Zeitstempel, zu dem dein Formular gerendert wurde.
Eine Einsendung, die unplausibel schnell eintrifft, schneller, als ein Mensch das
Formular plausibel hätte lesen und eine Antwort tippen können, wird als verdächtig
bewertet. Das ist ein günstiger Weg, um skriptgesteuerte Einsendungen zu erkennen, die
das Rendern komplett überspringen und einfach einen Payload per POST senden.

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

Setze den Wert zum Render-Zeitpunkt auf den aktuellen Zeitstempel (z. B. `Date.now()`
in JavaScript, oder die Server-Render-Zeit bei einer statischen Seite).

## 3. Den Rest automatisch laufen lassen

Sobald `access_key` verdrahtet ist, brauchen die übrigen Heuristiken keine Einrichtung
und laufen bei jeder Einsendung:

* **Link-Dichte**, eine Nachricht voller mehrerer URLs wird als wahrscheinlicher Spam
  eingestuft.
* **Rate Limiting**, wiederholte Einsendungen aus derselben Quelle in einem kurzen
  Zeitfenster werden gedrosselt, unabhängig vom Inhalt.
* **Erkennung von Wegwerf-/Duplikat-E-Mails**, Einsendungen von Anbietern für
  Wegwerf-E-Mail-Adressen sowie nahezu identische Wiederholungseinsendungen werden
  markiert. Falls dein Anwendungsfall legitim Wegwerf-Adressen erwartet, aktiviere
  `allow_disposable_email` für dieses Formular unter
  [Domain-Zulassungsliste](/docs/de/features/custom-domains), statt gegen die Standardeinstellung
  anzukämpfen.

## 4. Die Domain-Zulassungsliste absichern

`access_key` ist dafür gedacht, im öffentlichen Seitenquelltext zu stehen, es ist kein
Geheimnis, und CORS auf `/submit` ist absichtlich permissiv, damit jede Origin POSTen
kann. Die Liste der **erlaubten Domains** an jedem Formular ist die eigentliche Grenze,
die verhindert, dass jemand deinen Schlüssel kopiert und fremden Traffic (einschließlich
Spam) in deinen Posteingang leitet. Eine leere Zulassungsliste akzeptiert jede Origin,
das ist während der Einrichtung in Ordnung, sollte aber auf deine echte(n) Domain(s)
eingeschränkt werden, sobald das Formular live ist. Siehe
[Domain-Zulassungsliste](/docs/de/features/custom-domains).

## 5. Quarantäne als Prüfwarteschlange behandeln, nicht als schwarzes Loch

Nichts, was mit einem gültigen `access_key` ankommt, wird stillschweigend verworfen.
Alles, was als verdächtig eingestuft wird, landet im **Spam**-Tab des Formulars im
[Dashboard](https://app.formpaste.com) statt in deinem Posteingang, prüfe ihn regelmäßig
auf False Positives. Auf Free ist die Quarantäne nur lesbar, eine legitime Einsendung,
die fälschlich markiert wurde, erfordert, dass der Besucher erneut absendet, sobald du
behoben hast, was die Heuristik ausgelöst hat (meist ein Problem mit der
`botcheck`-Verdrahtung oder eine zu strenge Einstellung für Wegwerf-E-Mails).
[Pro](/docs/de/features/quarantine-rescue) fügt eine Ein-Klick-"Kein Spam"-Rettung hinzu, die
sie direkt erneut zustellt.

## Was das nicht leistet

Heuristische Bewertung reduziert das Spam-Volumen, sie garantiert kein Nullergebnis. Ein
entschlossener, gut finanzierter Angreifer, der dein Formular in einem echten
Headless-Browser rendert, eine plausible Zeit wartet und jeweils eine Einsendung von
einer Residential-IP sendet, kann trotzdem durchkommen, genauso wie er ein CAPTCHA
überwinden könnte. Das Ziel ist, die Kosten für Formular-Spam deutlich über die Kosten
der Alternative zu heben (ein echter Posteingang ganz ohne Filterung), nicht eine
unüberwindbare Mauer zu bauen.

<CardGroup cols={2}>
  <Card title="Spam-Filterung" icon="shield" href="/docs/de/features/spam-filtering">
    Was geprüft wird und wie die Bewertung funktioniert.
  </Card>

  <Card title="Quarantäne" icon="box-archive" href="/docs/de/features/quarantine">
    Wohin markierte Einsendungen gehen und wie du sie prüfst.
  </Card>

  <Card title="Domain-Zulassungsliste" icon="globe" href="/docs/de/features/custom-domains">
    Die echte Sicherheitsgrenze hinter einem öffentlichen access\_key.
  </Card>

  <Card title="Fehlerreferenz" icon="triangle-exclamation" href="/docs/de/reference/error-table">
    Einschließlich `rate_limited` und weiterer spam-naher Codes.
  </Card>
</CardGroup>
