Das Problem mit Spam in WordPress
WordPress ist eines der am weitesten verbreiteten CMS weltweit. Aufgrund seiner Popularität ist es ein bevorzugtes Ziel für Spammer, die automatisierte Nachrichten über Kontaktformulare versenden. Insbesondere Nutzer von Elementor Pro stehen oft vor dem Problem, dass ihre Formulare von unerwünschten Bots oder Spammern missbraucht werden.
Häufig tritt dabei immer wiederkehrender Spam auf, beispielsweise von bestimmten Absendern wie „Eric Jones“ oder mit kyrillischen Schriftzeichen. Wenn man aus Datenschutzgründen auf Google reCAPTCHA oder andere externe CAPTCHA-Dienste verzichten möchte, kann man dennoch effektive Filter einsetzen, um solche Spam-Nachrichten zu blockieren.
Lösung ohne CAPTCHA: Spam-Filter per Code Snippets
Eine effektive Möglichkeit, sich vor diesem Spam zu schützen, besteht darin, ein eigenes Filter-Skript zu implementieren. Dazu benötigt man das Plugin Code Snippets, mit dem sich benutzerdefinierter PHP-Code sicher in WordPress ausführen lässt.
Spam-Filter für Elementor Formulare
Mit dem folgenden PHP-Code kann man verhindern, dass Formulare mit bestimmten Inhalten versendet werden. Das Skript blockiert Einträge, die den Namen „Eric Jones“ enthalten oder kyrillische Zeichen verwenden.
add_action('elementor_pro/forms/validation', function($record, $handler) {
/* $form_name = $record->get_form_settings('form_name'); // Formularnamen abrufen
// Definiere, welches Formular validiert werden soll (optional)
if ($form_name !== 'Contact Form') {
return;
}*/
$raw_fields = $record->get('fields'); // Alle Formularfelder abrufen
// Felder in ein Array umwandeln, um sie einfacher überprüfen zu können
$fields = [];
foreach ($raw_fields as $id => $field) {
$fields[$id] = $field['value'];
}
// Regex, um kyrillische Zeichen zu erkennen
$cyrillic_pattern = '/[\p{Cyrillic}]/u';
// Namen, die blockiert werden sollen
$blocked_names = ['Eric Jones'];
$error_found = false;
foreach ($fields as $field_value) {
// Überprüfen, ob kyrillische Zeichen enthalten sind
if (preg_match($cyrillic_pattern, $field_value)) {
$handler->add_error_message('Kyrillische Zeichen sind nicht erlaubt.');
$error_found = true;
}
// Überprüfen, ob blockierte Namen enthalten sind (Groß-/Kleinschreibung wird ignoriert)
foreach ($blocked_names as $blocked_name) {
if (stripos($field_value, $blocked_name) !== false) {
$handler->add_error_message("Der Name '{$blocked_name}' ist nicht erlaubt.");
$error_found = true;
}
}
}
// Falls ein Fehler gefunden wurde, das Formular nicht absenden
if ($error_found) {
$handler->mark_fields_as_invalid(array_keys($fields));
$handler->submission_set_status(false); // Dies verhindert, dass die E-Mail gesendet wird
}
}, 10, 2);
Erklärung des Codes
- Formulardaten auslesen: Der Code liest alle eingegebenen Werte des Formulars aus.
- Prüfung auf Spam-Inhalte:
- Wenn eine Eingabe kyrillische Zeichen enthält, wird sie blockiert.
- Wenn der Name „Eric Jones“ eingegeben wird, wird das Formular nicht abgesendet.
- Fehlermeldung anzeigen: Falls ein Eintrag blockiert wird, zeigt Elementor eine entsprechende Fehlermeldung an.
Fazit
Mit diesem einfachen Code kann man gezielt wiederkehrenden Spam aus Elementor-Formularen herausfiltern, ohne auf externe Dienste wie Google reCAPTCHA angewiesen zu sein. Die Methode ist DSGVO-konform, da keine Daten an Dritte gesendet werden. Sie lässt sich leicht anpassen, indem weitere Namen oder Begriffe zur Sperrliste hinzugefügt werden.
Diese Lösung ist besonders nützlich für WordPress-Websites, die immer wieder von den gleichen Spam-Angriffen betroffen sind.