Seite 1 von 1
Spamfilter
Verfasst: 24.11.2003 10:33
von makue
Hallo,
gibt es ein Spamfilter-Mod? Also in etwa so wie das mit den Badwords. Ich möchte z.B. permanentes Groß- oder Kleinschreiben als Spam abweisen, weil das einfach schlecht zu lesen ist. Falls es sowas nicht gibt, wo setzt man da am besten an, wenn man sowas selbst realisieren möchte? Also ich meine, in welche Datei gehört der Code?
Danke!
Verfasst: 25.11.2003 22:45
von makue
Hat sich erledigt, ich habe mir was eingebaut, funktioniert perfekt!

Verfasst: 25.11.2003 22:48
von AmigaLink
makue hat geschrieben:Hat sich erledigt, ich habe mir was eingebaut, funktioniert perfekt!

Und das wäre???
Verfasst: 25.11.2003 22:49
von makue
Nun ja, habe mir halt selbst was geschrieben. Soll ich den Code posten?
Verfasst: 25.11.2003 23:18
von AmigaLink
Für mich nicht, aber evtl. hat jemand anderes Interesse daran!
Verfasst: 25.11.2003 23:27
von makue
Ok, ist eher "mal so schnell reingebaut", also garantiert kein schöner Code. Aber leicht erweiterbar. Ich prüfe momentan auf permanente Groß- oder Kleinschreibung. Der Quellcode ist kommentiert. Folgenden Code habe ich in die functions_post.php eingefügt:
Code: Alles auswählen
// Check Anzahl Großbuchstaben/Kleinbuchstaben usw. (makue)
if (!empty($message))
{
$ok = true; $gb = 0;
$l = strlen($message);
for ($k=0;$k<$l;$k++) if (substr($message,$k,1) >= "A" && substr($message,$k,1) <= "Z") $gb++;
if (preg_match ("/[,.!?]/", $message)) { // nur wenn auch Satzzeichen drin sind (warum, weiß ich auch nicht :-)
if ($gb == 0) $ok = false; // kein Großbuchstabe -> blocken
if ($gb == 1 && $l > 80) $ok = false; // ein Großbuchstabe und Textlänge größer 80 -> blocken
if ($gb == 2 && $l > 160) $ok = false; // zwei Großbuchstaben un Textlänge größer 160 -> blocken
if ($gb > 2) $ok = true; // ok wenn mindesten 3 Großbuchstaben
}
if ($l<40) $ok = true; // blockt nicht wenn Posting unter 40 Zeichen lang ist.
if ((($gb*100)/$l)>85 && $l>20) $ok = false; // block bei 85% Grossbuchstaben und Textlänge über 20
if (!$ok) $error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Block_message'] : $lang['Block_message'];
}
Das ganze wird vor folgenden Code eingefügt:
Code: Alles auswählen
// Check message
if ( !empty($message) )
{
$bbcode_uid = ( $bbcode_on ) ? make_bbcode_uid() : '';
$message = prepare_message(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid);
}
else if ( $mode != 'delete' && $mode != 'polldelete' )
{
$error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Empty_message'] : $lang['Empty_message'];
}
In die lang_main.php (für jede Sprache) muss man dann noch irgendwo den Text für "Block_message" ergänzen. Ich habe in die deutsche lang_main.php folgendes geschrieben:
Code: Alles auswählen
$lang['Block_message'] = "Dein Beitrag entspricht nicht der Netiquette.";
Meine Tests verliefen wie erwartet, Wie es in der Praxis aussieht, wird sich zeigen. Eventuell muss man Parameter anpassen oder sogar noch Code ändern. Wer Fragen hat, kann sich gern bei mir melden.