Der Spamfilter dient dazu vor der Verarbeitung von Formularen den Inhalt des Formulars und die IP Adresse des Absenders auf diverse SPAM Kriterien zu prüfen. Der Spam Filter kann aber auch nachträglich verwendet werden. So ist es möglich, dass man Einträge die schon in der Datenbank existieren geprüft werden. Der Spamfilter unterscheidet nicht zwischen Großbuchstaben und Kleinbuchstaben. Er Ignoriert Füllzeichen wie z.B. Sterne, Leerzeichen und Zeilenumbrüche.
Hinweis zum Spamfilter
Bei Spamfilter V0.1 handelt es sich nicht um ein fertiges Produkt, bei dem die Datei auf den Server kopiert wird und alle Probleme mit Spam sind vergessen. Es handelt sich hierbei um ein API, dieser OpenSource PHP Code ist dazu da um in bestehende Projete eingebettet zu werden. Wie das im Detail funktioniert wird im Folgenden beschrieben. Wichtig hierbei ist es, dass der Zugriff auf die Quelle (Spamfilter Daten) nicht ausprogrammiert ist. An der Stelle steht ein TODO. An der Stelle kann man dann entscheiden, wie der Zugriff auf die Daten erfolgen soll. Möglich sind z.B. 2 Tabellen in einer existierenden Datenbank oder einfach nur Textdateien im CSV Format. Dies ist an der stelle offen, um eine einheitliche Architektur zur
umgebenden Anwendung einhalten zu können.
Spamfilter Download
Download: spamfilter-0.1.zip
Spamfilfer Beschreibung
Die Funktion checkSpam ($text, $ip) kann mit belibigem Text und IP Adressen aufgerufen werden und gibt dann als Return Wert eine 0 oder eine 1 zurück. Ist der Returnwert eine 1, so handelt es sich um Spam. Ist der Returnwert dagegen eine 0, so handelt es sich nicht um Spam.
Die Leistungsfähigkeit des Spamfilters ist abhängig von der Konfiguration. Wesentliche Merkmale sind die Tabellen “badip” und “badword” und der Wert isspam der Konfiguration. Zusätzlich gibt es noch einen Wert noipval der zum Tragen kommt, wenn der Funktion checkSpam keine IP Adresse übergeben wird.
Spamfilter Konfiguration
isspam - default = 10
Diese Konstante legt fest, wann es sich um Spam handelt und wann nicht. Ein zu geringer Wert kann hier zu einen Spamfilter führen, der auch schon mal falschen Alarm gibt. Eine zu kleine Zahl kann den Spamfilter unwirksam machen. Dieser Wert hat eine starke Abhängigkeit zu den Werten ‘value’ in den Tabellen. Wenn der Wert isspam kleiner ist als die Summe der Werte die während der Prüfungen ermittelt werden, handelt es sich um SPAM. Anderenfalls ist es kein SPAM.
spamprefix - defaul= "spam_"
Prefix für die Tabellen in der Datenbank. Diese Einstellung hat keinen Einfluss auf die Qualität des Spamfilters. Er dient lediglich dazu, die Tabellen des Spamfilters von anderen Tabellen in der Datenbank zu unterscheiden.
noipval - default = 0
Ein Wert, für den Fall, dass keine IP Adresse gefunden wird. D.H. Wenn der Funktion checkSpam keine IP Adresse übergenen wird, addiert sich dieser Wert automatisch zur spamvalue, die dann mit isspam verglichen wird. Hiermit kann man den Spamfilter noch ein wenig schäffer fassen, wenn man keine Angaben zur IP Adresse hat.
spamdebug - default = 0
Wenn der Wert spamdebug auf 1 gesetzt wird, werden Zwischenergebnisse ausgegeben, die es einfacher machen, die Funktionsweise des Spamfilters zu verstehen. Im laufenden Betrieb ist der Wert in jedem Fall auf 0 zu setzen. Der Wert hat keinen Einfluss auf die Arbeitsweise des Spamfilters.
Spamfilter Tabellen
Tabelle: spamprefix_badip
Diese Tabelle dient dazu, IP Adressen mit einem Wert für den Spamverdacht zu belegen. Diese Einträge sind nur relevant, wenn man die REMOTE-IP des Absenders zur Verfügung hat. Für Prüfungen existierender Einträge in der Datenbank die nicht mit Absender IP Adressen versehen sind, ist diese Tabelle nicht relevant. Wenn die IP Adresse des Absenders einem Eintrag in der Tabelle entspricht, wird der Wert ‘value’ des Tabelleneintrags dem Spamverdachtswert hinzuaddiert.
Spalten: ip -> IP Adresse value -> Der Spamwert, der dieser IP Adresse zugewiesen ist. Der Wert kann auch negativ sein, um den Spamverdacht für die betroffene IP-Adresse zu reduzieren
Tabelle: spamprefix_badword
In der Tabelle werden die einzenen Wörter mit einem Spamverdachtswert belegt. Dieser Wert wird dem gesammten Spamverdachtswert des zu prüfenden Textes hinzuaddiert, wenn das Wort in dem text enthalten ist. Es werden immer alle Wörter in der Tabelle geprüft. Vor der Verarbeitung der Tabelle wird der Text um alle Zeichen reduziert, die nicht in dem regulären Ausdruck enthalten sind. In der Grundeinstellung sind das alle Zeichen, außer den Buchstaben a-z, den Umlauten und den Zahlen. Bei den Werten für word ist darauf zu achten, nicht zu keine Wörter zu verwenden, da z.B. Wörter wie “DU” auch Teil des Wortes “DUrchgeführt” sind und damit hier einen Spamverdacht verursachen. Als praktikabel haben sich hier Wörter mit einer Mindestlänge von 4 Buchstaben herauskristalisiert. Es ist weiterhin sinnvoll, verschieden Worte mit unterschiedlichen Werten zu belegen. So kann z.B.
Casino, Viagra oder Download mit einen hohen Wert versehen werden, der größer oder gleich dem “isspam” Wert aus der ist. Andere Textteile wie z.B. “href” oder “www” kann man mit geringeren Werten versehen. Dann wird der “isspam” Wert erst erreicht, wenn diese Textpassagen mehrfach im Text vorkommen
Spalten: word -> Entält das betreffende Wort für das der Spamverdachtswert gilt. value -> Enthält den Spamverdachtswert für das Wort.
Sonstige Hinweise für einen erfolgreichen SPAM Filter:
Für einen erfolgreichen Spamfilter ist es nötig, die Werte von Zeit zu Zeit anzupassen. In diesem Zusammenhang macht es sinn, sich die geprüften Textpassagen mit den Spamfilterergebnissen in einer Datenbanktabelle zu merken und bei Ändeungen der Filterkriterien noch mal zu prüfen. Anhand der Ergebnisse dieser Tests, kann man sehr leicht feststellen, ob der Spamfilter nach den Ändeungen besser oder schlechter geworten ist.
Administration der Tabellen:
Für die Administration der Datenbanktabellen existiert momentan kein spezielles Werkzeug. Ich persönlich verwende phpMyAdmin. Wer Lust hat, kann aber auch gerne ein kleines Verwaltungswerkzeug schreiben. Ich werde es gerne dem Projekt hinzufügen.
Weiterführende Links:
Bot-Trap.de – GEMEINSAM gegen Content Grabber, Web Spam, Sauger
Bei dem Projekt Bot-Trap handelt es sich um eine Community, die es sich zum Ziel gesetzt hat,
auf der Basis von verschiedenen Kriterien gute Besucher und schlechte Besucher von Webseiten zu unterscheiden und die potentiell bösen Bots komplett von der Webseite fern zu halten. Im Gegensatz zu diesem Projekt wird die kompl. Webseite für potentielle Grabber, Sauger, Hijacker, Duplicate Content Bots, usw. gesperrt. Die hier zur Verfügung gestellte Liste der IP-Adressen kann man getrost für den Spam Filter verwenden. Sollte aber darauf achten, dass der Spamverdachtswert nicht zu hoch vergeben wird.
phpMyAdmin – MySQL Database Administration Tool
Das ultimative Werkzeug zum verwalten von MySQL Tabellen. Auch für Benutzer die keine SQL Kenntnisse haben sehr zu empfehlen. Eine MySQL Datenbnak ohne phpMyAdmin ist eigentlich nicht denkbar
Spamfilter V0.1 Copyright by Michael Jentsch