Contact Form 7 mit SPAM-Botschutz
Dieses Beispiel zeigt ein Contact Form 7 Formular mit drei verschiedenen SPAM-Schutzmethoden:
- Unsichtbare Checkbox („subscribe“): Versteckte Checkbox, die Bots oft ankreuzen.
- Sichtbare Checkbox („bot-trick“): Checkbox mit auffälligem Label „Ich bin ein Bot…“ – echte Nutzer lassen sie frei, Bots kreuzen oft an.
- Time Trap: Formular muss mindestens 5 Sekunden geöffnet sein, bevor es abgesendet werden kann.
Contact Form 7 Formular Code
Diese Felder kannst du direkt in deinen Contact Form 7 Editor kopieren:
[text* your-name placeholder "Kontaktperson*"]
[email* your-email placeholder "E-Mail*"][honeypot mail]
[textarea* your-message placeholder "Nachricht ...*"]
[checkbox bot-trick use_label_element "Ich bin ein Bot und will dich ärgern"]
[checkbox subscribe default:off "Ja, ich möchte den Newsletter erhalten"]
[acceptance Datenschutz]
Ich habe die Datenschutzerklärung gelesen und akzeptiert.
[/acceptance]
[submit id:submit-btn "Senden"]
[hidden time-start id:time-start]
Mit Bootstrap:
<div class="row form-group">
<div class="col-md-6">
[text* your-name placeholder "Kontaktperson*"]
</div>
<div class="col-md-6">
[email* your-email placeholder "E-Mail*"]
[honeypot mail]
</div>
<div class="col-md-12">
[textarea* your-message placeholder "Nachricht ...*"]
</div>
<div class="col-lg-12">
[checkbox bot-trick use_label_element "Ich bin ein Bot und will dich ärgern"]
</div>
<div class="col-lg-12 checkbox">
[checkbox subscribe default:off "Ja, ich möchte den Newsletter erhalten"]
</div>
<div class="col-lg-12">
[acceptance Datenschutz]
<small>Ich habe die <a href="/datenschutz"><u>Datenschutzerklärung</u></a> gelesen und akzeptiert.</small>
[/acceptance]
[submit id:submit-btn "Senden"]
[hidden time-start id:time-start]
</div>
</div>
Die Klasse checkbox verbirgt die „subscribe“-Checkbox per CSS vor normalen Nutzern.
functions.php: PHP-Validierung für SPAM-Schutz
Füge diesen Code in die functions.php deines Themes ein, um die Felder serverseitig zu prüfen:
<?php
// Unsichtbare Checkbox und sichtbare Bot-Falle validieren
add_filter('wpcf7_validate_checkbox', function($result, $tag) {
$name = $tag->name;
// Versteckte Checkbox (Honeypot)
if ($name === 'subscribe') {
$value = isset($_POST['subscribe']) ? $_POST['subscribe'] : array();
if (!empty($value)) {
$result->invalidate($tag, "Formular wurde blockiert. Bitte verlasse meine Seite!");
}
}
// Sichtbare "Ich bin ein Bot"-Checkbox
if ($name === 'bot-trick') {
$value = isset($_POST['bot-trick']) ? $_POST['bot-trick'] : array();
if (!empty($value)) {
$result->invalidate($tag, "Formular wurde blockiert. Bitte verlasse meine Seite!");
}
}
return $result;
}, 10, 2);
// Time Trap Validierung: Mindestzeit 5 Sekunden für Absenden
add_filter('wpcf7_validate_hidden', function($result, $tag) {
if ($tag->name === 'time-start') {
$timeStart = intval($_POST['time-start']);
$now = round(microtime(true) * 1000);
// Mindestens 5 Sekunden (5000 ms) vergehen lassen
if (($now - $timeStart) < 5000) {
$result->invalidate($tag, "Du hast das Formular zu schnell ausgefüllt. Bitte warte mindestens 5 Sekunden.");
}
}
return $result;
}, 10, 2);
?>
Wie funktioniert der SPAM-Botschutz?
Spambots reagieren unterschiedlich auf die Felder:
- Feld-Analyse: Bots lesen das HTML und erkennen Eingabefelder, weisen ihnen automatisch Werte zu.
- Heuristiken & Blacklisting: Manche Bots ignorieren Felder mit verdächtigen Namen wie „bot“ oder „spam“.
- Logikbasiertes Ausfüllen: Manche Bots füllen nur offensichtlich notwendige Felder, lassen verborgenes oder „finktionales“ aus.
- Maschinelles Lernen: Sehr fortgeschrittene Bots nutzen KI, um sinnvolle Eingaben automatisch zu erkennen und auszufüllen.
Das „subscribe“-Feld trägt einen neutralen Namen und ist komplett versteckt (CSS display:none), daher erkennen viele Bots es nicht direkt als Falle, füllen es jedoch dennoch aus, was zum Block führt.
Die sichtbare Checkbox bot-trick („Ich bin ein Bot…“) ist eine Falle für weniger clevere Bots, die automatisch alles ankreuzen – echte Nutzer ignorieren dieses Feld und senden nicht ab.
Mit dem Time Trap wird verhindert, dass das Formular innerhalb weniger Sekunden abgesendet wird – typische Bots sind sehr schnell, echte Nutzer brauchen länger.
Zusammenfassung und Tipps
- Verstecke Fallen-Felder mit neutralen Namen per CSS, damit sie von echten Nutzern nicht gesehen werden.
- Verwende sichtbare „Bot-Trick“-Felder mit klaren Labels, die echte Nutzer anleiten, sie nicht anzukreuzen.
- Füge serverseitige Validierungen hinzu, um Manipulation zu verhindern.
- Nutze eine Time Trap, um Bot-Attacken durch sehr schnelle Submitts zu unterbinden.
- Testen: Formulare helfen nur, wenn sie gut umgesetzt sind. Teste mit echten Nutzern und gängigen Bots.
Demo Formular
P.S.
Pflichtfeld für Rechtliches mit [acceptance] – DSGVO-konforme Zustimmung
Erfahre, wie du mit dem Contact Form 7 Tag [acceptance] Pflichtfelder für Datenschutz, AGB & Co. setzt. Inkl. Anleitung für serverseitige Validierung via acceptance_as_validation.
<!-- Akzeptanzfeld mit Contact Form 7 -->
<label>
[acceptance Datenschutz]
Ich habe die <a href="/datenschutz"><u>Datenschutzerklärung</u></a> gelesen und akzeptiert.
</label>
<!-- Alternativ mit benanntem Tag (z.B. AGB) -->
<label>
[acceptance AGB]
Ich akzeptiere die <a href="/agb"><u>AGB</u></a>.
</label>
Wichtig: Damit das Akzeptieren auch als Pflichtfeld wirkt, muss in den Zusätzlichen Einstellungen des Kontaktformulars folgendes gesetzt werden:
acceptance_as_validation: on
Dadurch validiert Contact Form 7 serverseitig, ob das Acceptance-Feld vom Nutzer aktiv bestätigt wurde – sonst kann das Formular nicht abgesendet werden.
Dieses Vorgehen ist ideal, um rechtliche Zustimmungen (Datenschutzerklärung, AGB, Einwilligung zur Datenverarbeitung) gesetzeskonform zu dokumentieren.