Kurzanleitungen/Howtos

Kontaktformulare vor Spam schützen

27.04.2017

Spam-Mülleimer

Ein Kontaktformular stellt für viele Webseitenbetreiber ein einfaches Mittel dar, um (Kunden-)Anfragen entgegenzunehmen. Lästig wird es allerdings, wenn die legitimen Nachfragen in einer Flut von Spam untergehen. Um Spam abzuwehren, gibt es leicht umzusetzende Strategien.

Stufe 1: "Billig"-Captcha

Die erste Stufe stellt ein Captcha dar, das den Absender eine einfache Rechenaufgabe (z.B. Addition von zwei Zahlen) lösen läßt. Nur Nachrichten mit korrekt gelösten Aufgaben werden an den Seitenbetreiber weitergeleitet. So primitiv dieser Ansatz sein mag, bringt er doch für viele Seiten bereits eine drastische Verringerung der Spam-Einträge, da diese offenbar mit einfachen Bots geschehen.

Stufe 2: Kompliziertere Captchas

Sollte noch immer zuviel Spam eingehen, so läßt sich die Komplexität des Captchas erhöhen. Eine schnell umzusetzende Variante ist Googles reCAPTCHA, das aus einem JavaScript-Teil zum Einbetten in die Webseite und einer API zum Validieren der Eingabe (z.B. mittels PHP-Skript) besteht. Nachteil dieser Variante ist, daß hierbei Daten an Google übertragen werden und bei Nichterreichbarkeit der Google-Dienste die Funktionsfähigkeit der eigenen Webseite beeinträchtigt wird.
Neben reCAPTCHA gibt es eine Reihe frei verfügbarer Skripte, die Captchas von unterschiedlicher Komplexität implementieren und ohne externe Anbieter auskommen.
Mit diesen Captchas sollte man die meisten Bots abwehren können. Je nachdem, wieviel Ressourcen ein Spammer zur Verfügung hat, stellten auch komplexe Captchas keinen 100%-igen Schutz dar. So gibt es Unternehmen, die das Lösen von Captchas (durch Menschen) im 1000er-Pack anbieten.

Stufe 3: Anfragen von Spam-IPs herausfiltern

Wenn alle vorherigen Methoden nicht ausreichen, kann man das Kontaktformular um einen Check erweitern, der die IP-Adresse des Senders auf Spam-Aktivität überprüft. Verschiedene Anbieter sammeln hierzu solchermaßen bekanntgewordene IPs in einer Datenbank.
AbuseIPDB bietet einen derartigen Service an, der nach Registrierung über ein PHP-Skript genutzt werden kann. Die folgende Funktion überprüft eine IP und gibt zurück, ob diese als Spam-IP bekannt ist. Sind im Zeitraum von 30 Tagen zwei oder mehr Spam-Aktivitäten bekannt geworden, gilt diese als Spam-IP. Statt "XXX" verwenden Sie Ihren persöhnlichen API-Schlüssel, den Sie nach der Registrierung über die Webseite von AbuseIPDB abrufen können.

function isSpamIP($ip)
{
  $key = 'XXX';
  return(count(json_decode(
    file_get_contents('https://www.abuseipdb.com/check/'.$ip.'/json?key='.$key.'&days=30', false)
  )) > 1);
}

Fazit

Wie bei allen Szenarien, in denen es um die Abwehr von Angriffen geht, handelt es sich auch hier um ein Katz-und-Maus-Spiel. Umso besser die eigene Verteidigung ist, desto uninteressanter macht man sich für den Angreifer. Meist wird die eigene Webseite schon durch einfache Maßnahmen als Angriffsziel so unattraktiv, daß Spam nicht mehr durchdringt. Gegen Angreifer, die über große Geldmittel, viele "unverbrauchte" IPs und über die Fähigkeit zum stetigen Anpassen von Bots verfügen, helfen diese allerdings nicht. Letztendlich kann man nur die Latte etwas höher legen, um das Gros der Angreifer abzuwehren.

Achtung! Achtung! Die folgenden Anweisungen richten sich ausschließlich an fachkundige Personen. Bei jedem Schritt kann es zum kompletten Datenverlust kommen. Alle Angaben ohne Gewähr!