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:

  1. Feld-Analyse: Bots lesen das HTML und erkennen Eingabefelder, weisen ihnen automatisch Werte zu.
  2. Heuristiken & Blacklisting: Manche Bots ignorieren Felder mit verdächtigen Namen wie „bot“ oder „spam“.
  3. Logikbasiertes Ausfüllen: Manche Bots füllen nur offensichtlich notwendige Felder, lassen verborgenes oder „finktionales“ aus.
  4. 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

    Ja, ich möchte den Newsletter erhalten



    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.

    Kontakt

    Webdesignstudio WedDesign

    Eduard Wischnewski

    Am Justusberg 7
    41849 Wassenberg

      Ja, ich möchte den Newsletter erhalten