Seite 1 von 1

Antispam Codeschnippsel ok oder zu Serverlastig

Verfasst: 20.01.2007, 21:44
von Ice Man
Zuersteinmal, es geht um ein phpbb Forum.
Ist kein kleines, deswegen scheinbar interesant für die Spammer.
Einige Bereiche wie Bugs & Feedback hab ich für Gäste frei gegeben.

Da ich nun genug von dem Viagra Spam hab, hab ich mir was überlegt.
Ich prüfe bei jedem Gast, den geposteten text.

Code: Alles auswählen

############
$check = mysql_query("SELECT spam,wertung FROM spam_filter order by id ");
while ($daten=mysql_fetch_array($check  )):  

$a_spam2 = $daten['wertung'] *( substr_count ($pruf_message, "".$daten['spam'].""));

$a_spam  = $a_spam + $a_spam2;
	 
endwhile; 	 

if ($a_spam >4) 
{.......
Erklärung, in der Datenbank sind Wörter wie Viagra, Casino, Trademol, .ru und www, und "URL"
Für jedes Wort gibt es eine Wertigkeit von 1-5.
Also Viagra = 5
www = 2

So kann man z.b. 2x als gast www posten, ohne das es als Spam erkannt wird, aber sobald einmal Viagra vorkommt, dann ist es aus.
In der Datenbank sind nun aktuell 20 "Bad Words" drin.
Bei jedem Gäste Posting, wird der Beitrag 20x durch die schleife gejagt, und auf die Bad Words geprüft.

Ist das nun sehr Serverlastig, oder ist das wenig ?
Zumindest das Spamaufkommen ist um mind. 50% zurück gegangen.
Damit es auf knapp 100% geht, wollte ich noch paar Wörter in die Liste rein setzen, hab aber Angst, das der Server in die Knie geht.

Falls eine eine Verbesserungsidee hat, dann her damit :)

Verfasst:
von

Verfasst: 20.01.2007, 22:37
von Michael
Ich finde bot-trap.de eine gute Idee.

Gruß
Michael

Verfasst: 20.01.2007, 22:38
von cren
Wenn der Code nur beim Posten ausgeführt wird und das Forum nicht grad hunderte Postings pro Minute hat, dürfte es so gut wie keine Auswirkungen auf die Performance haben.

Verfasst:
von

Verfasst: 20.01.2007, 23:12
von Ice Man
Michael hat geschrieben:Ich finde bot-trap.de eine gute Idee.

Gruß
Michael
Ich wusste irgendwie das diese Antwort kommt ;)
Ich will aber nun mal nix fremdes nutzen.
Hier weiß ist was Sache ist :D

@ cren

danke, das beruhigt mich :)
Dann mache ich mich mal an die letzten 50 % :D

Zumindest funktioniert mein Codeschnippsel besser, als die meisten Sachen die man downloaden kann....

Re: Antispam Codeschnippsel ok oder zu Serverlastig

Verfasst: 21.01.2007, 00:23
von oldInternetUser
Ice Man hat geschrieben:

Code: Alles auswählen

############
$check = mysql_query("SELECT spam,wertung FROM spam_filter order by id ");
Da das ohnehin dein eigener Server ist, spielt es keine Rolle, ob Du dein Script oder die Datenbank pflegst.

Damit genügt es, die Kombinationen spam/wertung direkt als lokalen Array abzulegen - dann entfällt der Zugriff auf die Datenbank und der damit verbundene Kontextwechsel.

Verfasst: 21.01.2007, 11:03
von Ice Man
Den hab ich drin, und trotzdem Spam ;)
Der bringt gegen manuellen Spam überhaupt nix.
Da es ja keine Bots sind, sondern Menschen, die das Forum mit ihren schwachsins billige Seiten vollspammen :cry:

Verfasst: 21.01.2007, 11:23
von Boa
Gute Idee das so zu machen.

Verfasst: 21.01.2007, 12:03
von Ice Man
@ oldInternetUser
Das ist natürlich auch eine gute Idee, da bin ich selbst nicht drauf gekommen.
Da würde zumindest die MqSql Belastung wegfallen.

Danke, super Tip, werd ich doch glatt mal umsetzen :)

Verfasst: 21.01.2007, 13:41
von Ice Man
Falls es jemand interessiert, hier die Version ohne MySql :)
Geht schnell und funktioniert bestens :)

Code: Alles auswählen

// alles klein schreiben
$pruf_message = mb_strtolower($post_message);   
	  
// Wörter für Spam Filter
$spam     = array(
".info", 
".ru", 
"/a>", 
"blogspot.com", 
"casino", 
"http", 
"kostenlos-porn.info", 
"phentermine", 
"porn-movie-free.info", 
"pornotubee", 
"tramadol", 
"valium", 
"viagra", 
"www",
); 

// Wertigkeit des Spam
$wertung  = array(2,5,2,5,3,1,5,5,5,5,1,5,5,1);

// Anzahl Einträge
$max      = sizeof ($spam); 

for &#40;$i = 0;$i < $max;$i++&#41;&#123; 

 $a_spam2 = $wertung&#91;$i&#93; *&#40; substr_count &#40;$pruf_message, "".$spam&#91;$i&#93;.""&#41;&#41;;
 $a_spam  = $a_spam + $a_spam2;

&#125;

 if &#40;$a_spam >4&#41; 
&#123; 
die&#40;"Spam Versuch wurde erkannt <br> Versuchts woanders ihr Kasper."&#41;;
 &#125;
Funktion, der eingetragene Text wird zuerst klein geschrieben, dann auf die Wörter in der Spamfilterliste geprüft. Ist die Summe der einzelnen Prüfungen >5, dann wird das Script mit der Fehlermeldung beendet. Die einzelnen Wertigkeiten sind wichtig, da ja Gäste auch mal einen Link posten. So kann man individuell einstellen, ab wie viel Links oder bestimmten Wörtern es sich im Spam handelt. Vorteil, diese Beiträge werden erst gar nicht in die DB eingetragen. Somit muss man kein Spam löschen :)

Verfasst: 21.01.2007, 15:27
von Boa
"www",
ist das Komma da zuviel?
Versuchts woanders ihr Kasper
schön gesagt

Verfasst: 21.01.2007, 15:30
von Ice Man
stimmt, das Komma kann weg, danke für den Hinweis :)

Verfasst: 21.01.2007, 19:58
von root
Thumbs Up - danke Ice Man!