Spam im Kontaktformular verhindern: Honeypot, Zeitfalle, CAPTCHA | We.Inc
Stoppe Spam im Kontaktformular deiner Website mit einem Honeypot-Feld, einer Zeitfalle und einem kostenlosen CAPTCHA wie Turnstile, reCAPTCHA oder hCaptcha, geprüft auf deinem Server. Mit Live-Demo.
Spam im Kontaktformular verhindern
Setze zuerst günstige Prüfungen ein, erst danach störende. Füge ein verstecktes Honeypot-Feld hinzu, das Menschen nie sehen, Bots aber ausfüllen, lehne Formulare ab, die schneller abgeschickt werden, als ein Mensch tippen kann, und wenn trotzdem Spam durchkommt, ergänze einen CAPTCHA-Dienst wie Turnstile, reCAPTCHA oder hCaptcha, dessen Token dein Server prüft.
Spamschutz-Methoden im Vergleich
Methode
Was Besucher bemerken
Stoppt
Braucht Servercode
Honeypot-Feld
Nichts
Einfache Bots, die jedes Feld ausfüllen
Ja, eine einzeilige Prüfung
Zeitfalle
Nichts
Bots, die sofort absenden
Ja
Cloudflare Turnstile
Meist nichts, manchmal eine Checkbox
Die meisten automatisierten Einsendungen
Ja, ein siteverify-Aufruf
reCAPTCHA v3
Nichts; du erhältst einen Score
Die meisten automatisierten Einsendungen
Ja, prüfen und einen Schwellenwert wählen
hCaptcha
Manchmal ein Rätsel
Die meisten automatisierten Einsendungen
Ja, ein siteverify-Aufruf
Spam-Bots durchsuchen das Web nach Formularen und senden automatisch Beiträge ab. Dein Server sieht nicht, wer gerade tippt, deshalb funktioniert jeder Schutz, indem er Verhalten erkennt, das ein Mensch nicht zeigen würde, oder indem er einen separaten Dienst für den Besucher bürgen lässt. Probiere die ersten beiden Schutzmaßnahmen in der Demo aus und kopiere dann die passende Serverprüfung.
Füge ein zusätzliches Eingabefeld mit einem verlockenden Namen wie website hinzu und verstecke es per CSS statt mit type=hidden.
Füge ein verstecktes Feld hinzu, das den Zeitpunkt speichert, zu dem das Formular angezeigt wurde.
Verwirf auf dem Server jede Einsendung, bei der die Falle einen Wert hat oder der Zeitabstand unter ein paar Sekunden liegt.
Wenn der Spam weitergeht, füge ein CAPTCHA-Widget hinzu und prüfe dessen Token auf dem Server, bevor du die Nachricht speicherst oder per E-Mail versendest.
Nimm abgefangene Einsendungen stillschweigend an und verwirf sie. Eine Fehlermeldung verrät dem Bot, was er ändern muss.
Gib dem Fallenfeld tabindex="-1" und aria-hidden="true", damit Tastatur- und Screenreader-Nutzer nie darin landen.
Halte die Zeitfalle kurz, etwa drei Sekunden. Mit dem Autofill des Browsers füllen echte Menschen ein Formular schnell aus.
Lege einen geheimen CAPTCHA-Schlüssel nie in den Seitencode. Er gehört ausschließlich auf den Server.
Häufige Fragen
Was ist ein Honeypot-Feld?
Ein Eingabefeld, das im Code des Formulars steht, für Menschen aber versteckt ist. Besucher lassen es leer, weil sie es nie sehen; Bots, die jedes gefundene Feld ausfüllen, tragen etwas ein und verraten sich damit.
Gibt es eine kostenlose reCAPTCHA-Alternative?
Ja. Cloudflare Turnstile und hCaptcha bieten beide kostenlose Tarife nach demselben Muster: ein Script und ein Widget auf der Seite, dann ein Serveraufruf an eine siteverify-Adresse mit deinem geheimen Schlüssel und dem Token des Besuchers. Prüfe die Limits auf der aktuellen Tarifseite des jeweiligen Anbieters.
Zeigt reCAPTCHA v3 ein Rätsel an?
Nein. Laut Googles Dokumentation liefert v3 einen Score, bei dem 1.0 sehr wahrscheinlich eine echte Interaktion und 0.0 sehr wahrscheinlich ein Bot ist, und empfiehlt einen Startschwellenwert von 0.5. Was mit niedrigen Scores passiert, entscheidest du.
Kann das Widget allein Spam stoppen?
Nein. Die Dokumentation von Cloudflare sagt klar, dass das clientseitige Widget allein deine Formulare nicht schützt. Ein Bot kann direkt an die Adresse deines Formulars senden, deshalb muss der Server den Token prüfen.
Warum bekomme ich trotz Honeypot noch Spam?
Manche Bots steuern einen echten Browser und füllen nur sichtbare Felder aus, und mancher Spam wird von Menschen getippt. Ergänze die Zeitfalle, danach ein CAPTCHA. Lehne außerdem Nachrichten voller Links ab, wenn dein Formular nie welche braucht.
Warum die kostenlosen Prüfungen zuerst kommen
Ein Honeypot und eine Zeitfalle kosten Besucher nichts und fangen den großen Anteil an Spam ab, der von primitiven Scripts stammt. Ein CAPTCHA bringt ein Drittanbieter-Script, einen Eintrag in der Datenschutzerklärung und manchmal eine Aufgabe mit, also heb es dir für den Fall auf, dass du es brauchst.
Die Falle richtig verstecken
Verwende CSS, das das Feld aus dem sichtbaren Bereich schiebt, statt type="hidden", denn viele Bots überspringen versteckte Eingabefelder. Schalte Autofill dafür mit autocomplete="off" ab, denn ein Browser, der es ausfüllt, würde einen echten Menschen als Bot markieren.
MDN weist darauf hin, dass Browser autocomplete="off" bei Login-Feldern ignorieren können, also nenne die Falle nicht email oder password.
CAPTCHA-Tokens auf dem Server prüfen
Jeder Dienst legt einen Token in das Formular. Dein Server sendet diesen Token zusammen mit deinem geheimen Schlüssel an die siteverify-Adresse des Anbieters und macht nur weiter, wenn die Antwort meldet, dass success true ist.
Turnstile-Tokens sind 300 Sekunden gültig und können einmal geprüft werden. reCAPTCHA-v3-Tokens halten zwei Minuten, also fordere einen an, wenn der Besucher absendet, nicht beim Laden der Seite.
Honeypot und Zeitfalle kopieren
Das HTML kommt in dein Formular. Die Serverprüfung ist für Node mit Express gezeigt, aber die Logik besteht in jeder Sprache aus drei Zeilen.
Formular mit Honeypot-Feld
Die Klasse .hp schiebt die Falle aus dem sichtbaren Bereich. Das Feld started wird vom kleinen Script mit der aktuellen Zeit gefüllt.
Serverprüfung (Node, Express)
Bots bekommen dieselbe Antwort wie Menschen, damit sie nicht erfahren, welche Prüfung sie erwischt hat.
Turnstile, reCAPTCHA oder hCaptcha hinzufügen
Alle drei funktionieren gleich. Diese Details stammen aus der Dokumentation des jeweiligen Anbieters.
CAPTCHA-Dienste im direkten Vergleich
Turnstile
reCAPTCHA v3
hCaptcha
Script
Von Google mit deinem Site Key geladen
Widget
<div class="cf-turnstile" data-sitekey>
Kein Widget; execute beim Absenden aufrufen
<div class="h-captcha" data-sitekey>
Prüfen bei
challenges.cloudflare.com/turnstile/v0/siteverify
Googles Verify-Endpunkt
api.hcaptcha.com/siteverify
Token-Gültigkeit
300 Sekunden, einmalig nutzbar
Zwei Minuten
Siehe Doku des Anbieters
Ergebnis
success true oder false
success plus ein Score von 0.0 bis 1.0
success true oder false
Einen Turnstile-Token prüfen (Node 18 oder neuer)
Das Widget fügt deinem Formular ein Feld namens cf-turnstile-response hinzu. Bewahre den geheimen Schlüssel in einer Umgebungsvariable auf.
Live-Demo: Honeypot plus Zeitfalle
Nichts wird irgendwohin gesendet. Ein Klick auf Senden führt genau die Prüfungen aus, die ein Server machen würde, direkt hier in deinem Browser.
Dein Name
Nachricht
Website (dieses Feld leer lassen)
Wie ein Bot handeln: das versteckte Feld ausfüllen
Senden
Neu starten
Fülle das Formular aus und klicke auf Senden, um zu sehen, wie die Serverprüfung entscheidet.
Angenommen: Die Falle war leer und es sind {n} Sekunden vergangen. Ein echtes Formular würde die Nachricht jetzt senden.
Verworfen: Das versteckte Feld hatte einen Wert, das sieht also nach einem Bot aus. Der Besucher würde trotzdem eine Dankesnachricht sehen.
Verworfen: nach {n} Sekunden gesendet, schneller als das Minimum von {m} Sekunden.
Das versteckte Feld wird hier umrandet angezeigt, damit du siehst, was Bots sehen.