Aktuelles / BlogAktuelles / Blog

Neueste Meldungen, Hintergrundinfos, HOW-TOs

...und vieles mehr nur hier im Blog

Weitere Informationen zu Contentpapst Weitere Informationen zum CP::Shop

Neueste Beiträge


Entwickler-Blog: Tipps & Tricks

<< zum vorherigen Eintragzum nächsten Eintrag >>

CP::Forms: Spam in Formularen bekämpfen - Teil I (Mo, 19.06.2006)

Es gibt in CP::Forms verschiedene Möglichkeiten, den immer stärker anwachsenden Spam-Attacken in Gästebüchern, Weblogs und sonstigen Formularen entgegenzutreten und Spam effektiv zu unterbinden. Einige dieser Möglichkeiten werden wir in diesem und kommenden Beiträgen vorstellen. Den Anfang macht dabei der "Wortfilter für Formulareingaben".

Wenn Sie über PHP-Kenntnisse und insbesondere über Erfahrungen in der objektorientierten Programmierung verfügen, dann können Sie auf diesem Wege nicht nur einen Wortfilter in Ihr CP::Forms-Modul einbauen, sondern auf breiter Basis in die Funktionsweise des Modules eingreifen.

Damit die nachfolgend beschriebenen Änderungen keine Auswirkungen auf die restlichen CP::Forms-Module haben, muss zunächst der standardmäßige Formularcontainer kopiert und für dieses Modul angepasst werden. Gehen wir hier einmal davon aus, dass Sie Ihrem Modul den Ordnernamen "forms_contact" gegeben haben und dass es sich dabei um ein Kontaktformular handelt. Die für die Anzeige eines Formulares in CP::Forms zuständige Datei "/modules/forms/container/form.php" müssen Sie in diesem Fall als Kopie mit dem gleichen Namen im Ordner "/modules/forms_contact/container/" ablegen.

Öffnen Sie anschließend die Datei mit einem beliebigen Texteditor und ersetzen Sie den Namen der dort enthaltenen PHP-Funktion "forms_container_form" durch "forms_contact_container_form". Mit dieser Änderung wird bei der Anzeige des Formulares auf der Webseite bereits auf diese neue Datei zugegriffen.

Nun müssen noch die Funktionen "do_email_dataset()" und "do_insert_dataset()" des Modules erweitert werden. Die Funktion "do_email_dataset()" ist für den Versand der Formularangaben per Email zuständig und die Funktion "do_insert_dataset()" wird immer dann aufgerufen, wenn es sich um ein datenbankgestütztes CP::Forms-Modul handelt.

Für den Wortfilter wird der folgende PHP-Code benötigt:

/*
 class contentpapst_gui_forms_contact::do_email_dataset
 Verschickt den Inhaltes des Formulares eines CP::Forms-Modules per Email.
*/

function do_email_dataset($form) {

   $word_filter = "poker|casino|888|slots|baccarat|craps|omaha high|cash loan|payday|mortgage|blackjack|black jack|bingo|roulette|free craps|cash advance|texas hold em|texas holdem|keno|card stud";

  if (preg_match("/(".$word_filter.")/", $form["field"]["comment"])) {
     header("Location: http://en.wikipedia.org/wiki/Spam_in_blogs");
     exit;
  }
 
  include_once("modules/forms/class.index.php");
 
  $forms = new contentpapst_gui_forms();
  $forms->do_email_dataset($form);
 
}

/*
 class contentpapst_gui_forms_contact::do_insert_dataset
 Fügt einen neuen Eintrag in die Datenbank eines CP::Forms-Modules ein.
*/

function do_insert_dataset($form) {

   $word_filter = "poker|casino|888|slots|baccarat|craps|omaha high|cash loan|payday|mortgage|blackjack|black jack|bingo|roulette|free craps|cash advance|texas hold em|texas holdem|keno|card stud";

  if (preg_match("/(".$word_filter.")/", $form["field"]["comment"])) {
     header("Location: http://en.wikipedia.org/wiki/Spam_in_blogs");
     exit;
  }

  include_once("modules/forms/class.index.php");

  $forms = new contentpapst_gui_forms();
  $forms->do_insert_dataset($form);

}

Dieser PHP-Code muss in der Datei "class.index.php" des Modules eingebaut werden und zwar direkt vor der letzten geschweiften Klammer ("}") am Ende der Datei. Diese Datei finden Sie direkt im Ordner "/modules/forms_contact/".

Und was genau macht dieser Wortfilter jetzt? Nun, dies ist recht einfach erklärt: Der Wortfilter überprüft, ob in einem Formularfeld mit dem Namen "comment" einer der in der Variablen "$word_filter" gelisteten Begriffe enthalten ist. Wird z.B. der Begriff "cash advance" gefunden, dann wird in diesem Beispiel direkt auf eine thematisch passende Infoseite bei der Wikipedia weitergeleitet. Wenn hingegen keiner der Begriffe vorhanden ist, dann werden die normalen CP::Forms-Funktionen zum Hinzufügen neuer Einträge bzw. zum Versand von Formularinhalten per Email aufgerufen. D.h. die Funktionsweise der Standard-Funktionen wird nicht geändert, sondern es wird lediglich ein Filter davorgeschalten.

In der Variablen "$word_filter" können Sie nun beliebige eigene Begriffe einfügen. Achten Sie dabei darauf, dass die einzelnen Begriffe jeweils durch "|" voneinander getrennt sein müssen, damit diese korrekt verarbeitet werden können. Zusätzlich können Sie die Ziel-URL ändern (z.B. in "index.php" für die Startseite des Systems) sowie den Feldnamen, wenn Sie in Ihrem CP::Forms-Modul ein Textfeld mit einem anderen Namen nutzen. Und wenn Sie mehrere Felder überprüfen möchten, dann kopieren Sie die 4-zeilige if-Überprüfung und tauschen Sie dort entsprechend die Namen der Felder aus.


RSS-Feed abonnieren RSS-Feed abonnieren

Blog-Eintrag kommentieren

Um einen Kommentar zu diesem Beitrag zu verfassen, können Sie sich im folgenden Formular entweder manuell mit Benutzername und Email-Adresse identifizieren oder aber Sie loggen sich über ein vorhandenes Profil bei Facebook, Twitter, OpenID etc. ein. Auf Wunsch haben Sie die Möglichkeit, sich automatisch über weitere Kommentare informieren zu lassen.

<< zurück

Weitere Einträge in der Kategorie "Tipps & Tricks"

Hier finden Sie die eBusiness-/eCommerce-Spezialisten von sandoba.de:
https://www.sandoba.de/blog/tipps-und-tricks/cpforms-spam-in-formularen-bekaempfen-teil-i/