Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> [PHP] Badword-Filter - Hilfe
TTlong
Geschrieben am: Mi 30.01.2008, 17:01
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 274
Mitglied seit: 8.02.2007


Hallo,

ich will mir einen Badword-Filter basteln, weiss aber net, wie ich prüfen soll, ob ein "Badword" in der übergebenen Variable (Zeichenkette) vorhanden ist.

$badword = // Werte aus DB
$text = // per POST übergebener Wert

Kann jemand weiter helfen?


Danke und Gruß TTlong


--------------------
Top
PMEmail Poster
Top
 
 
Jörg Kruse
#2 Geschrieben am: Mi 30.01.2008, 17:10 (+00:09)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 394
Mitglied seit: 19.12.2004


In PHP kannst du mithilfe der Funktion preg_replace() Muster (in diesem Fall die Bad Words) innerhalb von Strings ersetzen.

Edit:

str_replace() wäre noch einfacher und würde für diesen Zweck wohl auch ausreichen


--------------------
Top
PMEmail PosterUsers Website
Top
 
connectR
#3 Geschrieben am: Mi 30.01.2008, 17:51 (+00:40)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 54
Mitglied seit: 29.01.2008


Ich würde statt str_replace eher auf str_ireplace setzen, weil case-insensitive


--------------------
wir-sammeln.com - ...weil Menschen sammeln
BodyVoten.de - Bilder voten
CashPeople.de - Geld verdienen im Internet
Top
PM
Top
 
DZVO
#4 Geschrieben am: Mi 30.01.2008, 18:06 (+00:15)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 116
Mitglied seit: 19.03.2007


naja ganz so einfach könnt ihr euch das auch nicht machen.
denn oft werden ja bad-words mit sonderzeichen kodiert also statt viagra schreibt man via*gra

daher würde ich erstmal ein preg_replace über den string jagen wo sämtliche sonderzeichen entfernt werden.
danach dann str_word_count um die dortanzahl zu zählen
str_word_count kann dir dann den string als wortarray zurückgeben dann ein
in_array() wo treffer mitzählen

dann nen kleinen 3satz um den prozentsatz der badwords rauszubekommen
dann ne kleine switchanweisung

0% allet paleti
1-3% spam verdacht
>3% spam string in db sperren bis zur manuellen prüfung smile.gif


so ungefähr könnte es aussehen


--------------------
Kuckst du oder ..... du
wiirtuell.de - noch ein Wii Blog
Top
PMICQ
Top
 
TTlong
#5 Geschrieben am: Mi 30.01.2008, 18:57 (+00:51)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 274
Mitglied seit: 8.02.2007


Danke für eure Antworten.

Das ganze ist für mein SMS Script. Mit str_word_count hab ich bereits eine seperate Sperre, die verhindert, dass zu wenig Wörter verschickt werden. Nun soll das alles auch noch nach nicht erlaubten Wörter durchforstet werden.

Sollte ein derartiges Wort im Text gefunden werden, wird die entsprechende IP in die Tabelle mit den geblockten IP's geschoben und hat dann keinen Zugriff mehr auf das Script.

Brauche im Prinzip nicht schauen, ob dort noch Sonderzeichen drin sind, die kann ich ja dann entsprechend in die Blacklist eintragen.

Schau mir jetzt mal preg_* und str_ireplace an.


--------------------
Top
PMEmail Poster
Top
 
TTlong
#6 Geschrieben am: Do 31.01.2008, 19:24 (+24:27)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 274
Mitglied seit: 8.02.2007


So, hab jetzt was zusammengebastelt was funktioniert (wenns noch jemand gebrauchen kann):

QUOTE
$ergebnis = mysql_query("SELECT words FROM xxx_badword");
  while($row = mysql_fetch_array($ergebnis))
    {
$badwords=$row["words"];

$badword = array($row["words"]);
$text = $HTTP_POST_VARS[text];

foreach($badword as $forbidden){
$ok = substr_count($text, "$forbidden");
if($ok>0){
$pos = strpos($text, "$forbidden");
$monl = strlen($forbidden);
$mon = substr($text, $pos, $monl);

mysql_query("INSERT INTO xxx_blocked (blocked_ip, ...) VALUES ('$ip', ...)");
     }
  }
}


Falls noch wer nen Verbesserungsvorschlag hat, immer her damit.

Gruß TTlong


--------------------
Top
PMEmail Poster
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#7 Geschrieben am: Do 31.01.2008, 19:51 (+00:26)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2080
Mitglied seit: 4.02.2006


Ich habe zwar noch fast keine Erfahrung mit solchen Badword-Filtern.

Allerdings macht dein Code das, was man normalerweise nicht machen soll: Du holst pro Fall die Daten (hier: Badwords) und gehst sie in einer Schleife durch. Damit stehen typische Datenbank-Techniken nicht zur Verfügung - normalerweise sollten diese (1) grundsätzlich performanter sein, (2) das 'Herausholen' der Daten (jedesmal) ließe sich vermeiden.

Beispiel (wird bei server-daten in ähnlicher Form eingesetzt: Dort sind in benutzerdefinierten Abfragen bestimmte MS-SqlServer-Schlüsselwörter verboten):

CODE
Select Top 1 A.id
From badwords As A
Where @inputString Like '%' + A.badword + '%'


@inputstring wird mit der zu prüfenden Zeichenfolge belegt.

Auf diesem Level stimmt das nicht ganz, da auch ein Badword als Teil eines größeren Wortes erkannt wird (was u.U. falsch sein könnte). Bei server-daten ist eine Wortzerlegung vorgeschaltet, so daß jedes Wort in einer eigenen Zeile drinsteht. Dann stimmt das exakt, dann läßt sich das sogar direkt über einen Join machen.

Allerdings reicht die obige Methode bei Badwords aus - da will man ja auch Wortbestandteile killen.

Vorteil 1: Die Wortliste muß nicht erst rausgeholt werden.
Vorteil 2: Normalerweise sind Sql-Anweisungen, die auf Mengen operieren, effizienter als ein zeilenweises Abarbeiten.

Im Prinzip mußt Du bloß gucken, ob diese Abfrage eine Zeile zurückgeliefert hat.

PS: Nachträglich muß ich natürlich feststellen: Ich habe doch schon Erfahrung damit biggrin.gif


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
Sven K
#8 Geschrieben am: Fr 1.02.2008, 07:52 (+12:00)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 130
Mitglied seit: 27.10.2006


QUOTE
Note: preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg().


eregi ist total veraltet! ausderdem benutzt ereg genauso regular expressions.


--------------------
idiot confusion device | Computer Forum
Top
PMEmail Poster
Top
 
Claus Lehmann
Partnerprogramme.com
#9 Geschrieben am: Do 14.02.2008, 23:01 (+13d 15:08)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Marketing
Beiträge: 279
Mitglied seit: 29.04.2005


@TTLong

hast Du eine Quelle für eine deutsche Badwords-Liste. Gibt es das als Download (GPL)?


--------------------
Geld verdienen mit kostenlosen Partnerprogrammen
http://www.partnerprogramme.com
Informationen zu Krediten von Privat an Privat
http://www.p2p-kredite.com
Top
PMEmail PosterUsers Website
Top
 
Claus Lehmann
Partnerprogramme.com
#10 Geschrieben am: Do 14.02.2008, 23:07 (+00:06)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Marketing
Beiträge: 279
Mitglied seit: 29.04.2005


QUOTE (jAuer @ Do 31.01.2008, 19:51)
Beispiel (wird bei server-daten in ähnlicher Form eingesetzt: Dort sind in benutzerdefinierten Abfragen bestimmte MS-SqlServer-Schlüsselwörter verboten):

CODE
Select Top 1 A.id
From badwords As A
Where @inputString Like '%' + A.badword + '%'


@inputstring wird mit der zu prüfenden Zeichenfolge belegt.

Auf diesem Level stimmt das nicht ganz, da auch ein Badword als Teil eines größeren Wortes erkannt wird (was u.U. falsch sein könnte). Bei server-daten ist eine Wortzerlegung vorgeschaltet, so daß jedes Wort in einer eigenen Zeile drinsteht. Dann stimmt das exakt, dann läßt sich das sogar direkt über einen Join machen.

Allerdings reicht die obige Methode bei Badwords aus - da will man ja auch Wortbestandteile killen.


jAuer,

man könnte erst Deinen Code anwenden,
dann mit explode den InputString in ein Array der einzelnen Worte zerlegen und dann prüfen ob das Trefferwort in dem Array ist. Dann wäre es immer noch performant aber es würden keine Wortbestandteile erkannt sondern nur volle Wörter


Anderer Punkt. Ist es wirklich sinnvoll die Badwords als einzelne Zeilen in der Tabelle zu halten?
Einen String der sie alle enthät könnte ich schnell aus der Datenbank einlesen (dann in Array zerlegen), alle weiteren Operationen dann im Speicher. Oder nicht?


--------------------
Geld verdienen mit kostenlosen Partnerprogrammen
http://www.partnerprogramme.com
Informationen zu Krediten von Privat an Privat
http://www.p2p-kredite.com
Top
PMEmail PosterUsers Website
Top
 
Björn Kaiser
Xewo Marketing Manufaktur
#11 Geschrieben am: Do 14.02.2008, 23:34 (+00:26)
Report PostQuote Post

AyomRank 6
Group Icon

Gruppe: Moderatoren
Beiträge: 601
Mitglied seit: 20.09.2006


Hallo an alle,

ich bin kein Progger, darum weiss ich auch nicht, ob der Quelltext stimmt oder das, was er angeblich tun soll, auch macht!!!

Ich habe das hier auf Homepage-Forum.de gesehen:

QUOTE
Einsatzgebiet:
private Gästebücher in deutscher Sprache

Funktionsweise:
Prüft die Eingaben in der Textarea nach den gängigsten Wörtern der Spammer.

Features:
Rauswurf aus dem Gästebuch nach einer angegebenen Menge an Fehlversuchen.

Es sind insgesamt 3 Schritte notwendig.

1. Schritt
Ergänzung des Formulares um 2 versteckte Felder.
Einfach an das Ende des Formulares kopieren.
HTML-Code:

QUOTE
<input type="hidden" name="pruefung" value="<? echo $pruefung;?>">
<input type="hidden" name="eintragen" value="1" />


Das 1. Element zählt die Fehlerversuche beim abschicken des Formulares
Das 2. Element ist eine Kontrollvariable zum Ausführen des eigentlichen Codes

An die gewünschte Stelle im HTML-Bereich den folgenden Code setzen.
Er gibt den Hinweistext aus, wenn Spam erkannt wurde.
PHP-Code:

QUOTE
<?php echo $spamtext; ?>


2. Schritt
Nun muß der Ursprüngliche Code des Gästebuches in eine weitere Abfrage gesetzt werden.

PHP-Code:

QUOTE
if ($eintragen == 1)
{
    eigentlicher Code
}


3. Schritt
Den folgenden Code an den Anfang der Seite kopieren, noch bevor die HTML Auszeichnung beginnt.
Anpassen des Namens der Textarea und evtl. die Rauswurf_url.

PHP-Code:

QUOTE
if (isset($_POST["pruefung"]))
{
    // Postvariablen aufarbeiten
  $pruefung = $_POST["pruefung"];
  $eintragen = $_POST["eintragen"];
    // Hier den Namen der Textarea anpassen
  //  nur rechts im $_POST-Bereich das Wort message ersetzen
  $message = stripslashes($_POST["message"]);
    // Nach wieviel Fehlversuchen soll der Schreiber rausgeworfen werden ?
    // Der Poster hat z.B. 3 Fehlversuche, beim 4. geht es ab.
  //  Das greift nur, wenn im Text ein Wort aus der Badword Liste vorhanden ist.
  $rauswurf = 3;
    // Wohin soll er rausgeworfen werden ?
  $url_rauswurf = "http://www.antispam.de/";
    // Hinweistext für den Spammer
  $spamhinweis = "No Spam please !!!";
  // Die Liste kann beliebig erweitert werden
  $badwords =  "thanks,good,great,thank,tnx,look,looking,perfect,very,nice,gay";


  // Rauswurf wenn oben angegebene Menge an Postings erreicht wurde
  if ($pruefung == $rauswurf): header("location:".$url_rauswurf.""); endif;
  $wordtest = explode(",",$badwords);
  foreach ($wordtest as $value)
  {
  if (stristr($message,$value)):
    $eintragen = 0;
    $spam = 1;
  endif;
  }
  if ($spam == 1):
  if (empty($pruefung)) $pruefung = 1; else $pruefung = bcadd($pruefung,1,0);
  $spamtext = $spamhinweis;
  endif;
} // Ende $_POST["pruefung"]


Das war es auch schon.
Wenn es nach dem Einbau Fehlermeldungen gibt, liegt es wahrscheinlich an einem Fehler in der Klammersetzung.

Die Badword Liste ist nur ein kleiner Baustein zu einem Spamsicheren Gästebuch, aber immerhin ein erster Schritt der schon eine Menge bringt.
Der Einsatz ist nur sinnvoll, wenn man ansonsten keine englischen Einträge hat.

Ich habe auf 2 verschiedenen HP´s dasselbe GB im Einsatz.
Eines mit und eines ohne diese Liste.
Das eine wird weiter zugespammt und beim anderen hatte ich seitdem nicht einen einzigen Spameintrag.

Dieses Script ist auch problemlos im Kontaktformular einsetzbar.


Quelle: [Tutorial | PHP] Badword Liste für Gästebuch - Homepage-Forum.de geschrieben von Marco >> User auf Homepage-Forum.de

Meine Frage: kann man das auch Umschreiben für ein Forum? Oder kann man das hier 1:1 übernehmen?

Vielleicht ist es ja auch ein Denkanstoss für andere.

besten Gruss Björn

PS: als Anregung für Bad-Words: Schimpfwoerter.de

Nachtrag: hier sind mal 2 Listen. Nur Überflogen, keine Ahnung, ob sie was wert sind:

http://www.analytictech.com/mb870/bwfldata.htm

http://www.delphipraxis.net/topic37248.html


--------------------
hier erfährt man die Wahrheit über "die Bild" >> Bildblog.de
<< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>
Xewo Blog Beitrag >> Adult Anbieter für Webmaster und Affiliates
Xewo Blog Beitrag >> 1. mobiles Adult Partnerprogramm für Webmaster
Top
PMEmail PosterUsers Website
Top
 
Claus Lehmann
Partnerprogramme.com
#12 Geschrieben am: Fr 15.02.2008, 01:00 (+01:25)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Marketing
Beiträge: 279
Mitglied seit: 29.04.2005


QUOTE (Björn Kaiser @ Do 14.02.2008, 23:34)
PS: als Anregung für Bad-Words: Schimpfwoerter.de


Björn, dazu aus dem Impressum der Seite:
alle darauf enthaltenen Informationen, Texte, Bilder, Videos, etc. sind urheberrechtlich geschützt!

QUOTE

Nachtrag: hier sind mal 2 Listen. Nur Überflogen, keine Ahnung, ob sie was wert sind:

http://www.analytictech.com/mb870/bwfldata.htm

http://www.delphipraxis.net/topic37248.html


Das sind leider englische Wortlisten. Bräuchte eine deutsche.

Kennt vielleicht einer eine kostenlose Forensoftware in der bereits eine deutsche Wortliste badwords enthalten ist (die Forensoftware brauche ich nicht, wäre für mich nur wegen der Wortlist interessant).



--------------------
Geld verdienen mit kostenlosen Partnerprogrammen
http://www.partnerprogramme.com
Informationen zu Krediten von Privat an Privat
http://www.p2p-kredite.com
Top
PMEmail PosterUsers Website
Top
 
Björn Kaiser
Xewo Marketing Manufaktur
#13 Geschrieben am: Fr 15.02.2008, 01:07 (+00:07)
Report PostQuote Post

AyomRank 6
Group Icon

Gruppe: Moderatoren
Beiträge: 601
Mitglied seit: 20.09.2006


QUOTE
Björn, dazu aus dem Impressum der Seite:
alle darauf enthaltenen Informationen, Texte, Bilder, Videos, etc. sind urheberrechtlich geschützt!


das soll also heissen, wenn ich hier jetzt "Steckdosenbefruchter" schreibe, verstosse ich gegen ein Urhebergesetz?

das kann ich mir dann doch nicht vorstellen. Ausserdem soll es ja nur eine Anregung sein, auf welche Bad-Words manche kommen mit ihrer Fantasie.

Zu deiner Suche: ich glaube kaum, das man eine deutsche Liste findet, die würde wahrscheinlich nicht mal Alain rausrücken wink.gif

Gruss Björn


--------------------
hier erfährt man die Wahrheit über "die Bild" >> Bildblog.de
<< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>
Xewo Blog Beitrag >> Adult Anbieter für Webmaster und Affiliates
Xewo Blog Beitrag >> 1. mobiles Adult Partnerprogramm für Webmaster
Top
PMEmail PosterUsers Website
Top
 
Claus Lehmann
Partnerprogramme.com
#14 Geschrieben am: Fr 15.02.2008, 01:12 (+00:04)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Marketing
Beiträge: 279
Mitglied seit: 29.04.2005


QUOTE (Björn Kaiser @ Fr 15.02.2008, 01:07)

Zu deiner Suche: ich glaube kaum, das man eine deutsche Liste findet, die würde wahrscheinlich nicht mal Alain rausrücken wink.gif


Du schätzt Alain völlig falsch ein.
Ich kann aus eigener Erfahrung sagen, dass er seeeeehr hilfsbereit ist.


--------------------
Geld verdienen mit kostenlosen Partnerprogrammen
http://www.partnerprogramme.com
Informationen zu Krediten von Privat an Privat
http://www.p2p-kredite.com
Top
PMEmail PosterUsers Website
Top
 
Björn Kaiser
Xewo Marketing Manufaktur
#15 Geschrieben am: Fr 15.02.2008, 01:17 (+00:04)
Report PostQuote Post

AyomRank 6
Group Icon

Gruppe: Moderatoren
Beiträge: 601
Mitglied seit: 20.09.2006


Dann frag ihn doch. Seine Liste dürfte bestimmt auch schon 300-400-500 Worte enthalten.

Das Alain hilfsbereit ist, weiss ich selbst. Nur wenn so eine Liste mal im Umlauf ist und man weiss, wo sie eingesetzt wird, dann kann man sehr schnell Mist damit bauen.

Das meinte ich damit: solche Listen sind ja schon fast wie der "Heilige Gral" und somit Top Secret.
Und wenn sie so einfach zu haben wären, dann müsste man sie ja bei der dicken Tante recht einfach finden.


--------------------
hier erfährt man die Wahrheit über "die Bild" >> Bildblog.de
<< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>
Xewo Blog Beitrag >> Adult Anbieter für Webmaster und Affiliates
Xewo Blog Beitrag >> 1. mobiles Adult Partnerprogramm für Webmaster
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/22753

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Hilfe für eine Freundin finanzcheck 151 4 Mi 2.07.2008, 19:26
hilfe... anysom 174 3 Sa 7.06.2008, 17:31
Bitte um ganz kurze Hilfe Schwede 214 7 Mi 7.05.2008, 18:05
Aministrations Hilfe pillee 141 1 Mi 30.04.2008, 19:02
Hilfe bei Vertragsangelegenheit Tifflor 109 5 Do 24.04.2008, 09:51
Hilfe chrisy34 197 4 Do 17.04.2008, 14:24
Suche sehr sicheres CMS bis € 200 ! Hílfe Riddler 240 3 Fr 22.02.2008, 04:38
Hilfe für meinen Weblog - Euer Urteil Christian 409 8 Mi 20.02.2008, 21:32
Hilfe zu objektorientiertem PHP Script sd12 584 10 So 10.02.2008, 20:49




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen




cyon Webhosting



[Interessiert an einer Anzeige?]