Enrico: Bad-Word-Filter mit ausgelagerter "Wort-Datenbank"

Hallo,

Nachdem ich nun alle Fehler beseitigen konnte (siehe meinen letzten Thread), bin ich nun dabei, einen Bad-Word-Filter einzubauen.

Da die Definitionen für zu filternde Wörter/Begriffe sehr, sehr umfangreich wird, möchte ich die Wörter/Begriffe in einer eigenen JS-Datei definieren.

Wie muss ich die Verbindung der Funktion "bad_word_filter (inhalt)" zur ausgelagerten JS-Datei, die alle verbotenen Wörter/Begriffe enthält, herstellen ?

Danke im voraus.

Gruss, Enrico
PS: Mit einer MySQL-Datenbank will ich (noch) nicht arbeiten. Ich bin froh, dass ich meine Homepage mit einfachen JS-und PHP-Bordmitteln zum Laufen gebracht habe :o)

  1. Hello,

    PS: Mit einer MySQL-Datenbank will ich (noch) nicht arbeiten. Ich bin froh, dass ich meine Homepage mit einfachen JS-und PHP-Bordmitteln zum Laufen gebracht habe :o)

    Wie wird das denn hier mit der Rechtschreibkontrolle gemacht? Ist doch eine ähnliche Aufgabenstellung.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallo Tom,

      Wie wird das denn hier mit der Rechtschreibkontrolle gemacht? Ist doch eine ähnliche Aufgabenstellung.

      Ich weiss nicht, ob ich Dich oder Du mich da nicht richtig verstanden hast :o) Vielleicht reden wir ja auch aneinander vorbei :o)

      Man möge mir bei meinen Verständnisproblemen wohlgesonnen gegenübertreten, ich habe eine programmierintensive Nachtschicht hinter mir :o)

      Reicht es, wenn ich die ausgelagerte JS-Datenbank einfach so einbinde (so, wie es bei allen ausgelagerten JS-Dateien der Fall ist) oder muss ich da noch etwas beachten ?

      Gruss, Enrico

  2. Moin!

    Nachdem ich nun alle Fehler beseitigen konnte (siehe meinen letzten Thread), bin ich nun dabei, einen Bad-Word-Filter einzubauen.

    Bad-Word-Filter sind sinnlos. Sie verhindern beim uninformierten Benutzer exakt einmal deren Verwendung, danach werden Taktiken zu deren Umgehung erfolgreich angewendet werden.

    Im Gegenzug werden aber ganz normale Worte auch betroffen sein.

    Beispiel: Wenn du das Wort "scheiß" filtern willst, wird vielleicht "scheis" oder "shice" genommen werden.

    Wenn du "scheis" filterst, dann logischerweise nicht nur als Komplettwort (denn sonst könnte man den Filter ja mit "Oberscheis" umgehen), sondern als Wortbestandteil.

    Wenn jetzt aber jemand über "Kirscheis" redet ... was dann? Ok, er könnte über "Kirsch-Eis" schreiben. Alle anderen dann aber auch über "Obersch-eis" - und dein Filter würde wieder nicht greifen.

    Da die Definitionen für zu filternde Wörter/Begriffe sehr, sehr umfangreich wird, möchte ich die Wörter/Begriffe in einer eigenen JS-Datei definieren.

    Das ist genau das Problem. Wenn du vollständige Wörter definieren wolltest, wäre deine Liste notorisch unvollständig und leicht zu umgehen. Wenn du Wortbestandteile definierst, filterst du zuviel raus, weil die Sprache sich eben nicht klar in "Buchstaben, die nur in bösen Worten vorkommen" und "Buchstaben, die in guten Worten vorkommen" trennen läßt.

    Abgesehen davon: Deine ausgelagerte JS-Datei wird erstens sehr groß, und zweitens wird ihr Platzbedarf im Speicher ebenfalls sehr groß, denn die Liste kann ja nicht als reine Textdatei bei Bedarf durchsucht werden, sondern wird vielmehr ein Array vorbelegen, in dem dann alle bösen Wörter drinstehen.

    Und wer kein Javascript hat, muß sich damit gar nicht rumschlagen. :)

    - Sven Rautenberg

    1. Hallo Sven,

      Bad-Word-Filter sind sinnlos

      Für sinnlos halte ich sie keineswegs. In Foren werden ja auch oft verbotene Wörter - weitesgehend - herausgefiltert.

      Im Gegenzug werden aber ganz normale Worte auch betroffen sein

      Das ist in der Tat ein Problem, das man aber - wenn auch mit viel Aufwand verbunden - umgehen kann.

      Wenn jetzt aber jemand über "Kirscheis" redet

      Sehr gutes Beispiel !!!

      Um ein Umgehen zu verhindern, müsste man hier schonmal mehrere Varianten berücksichtigen:

      1. Eissorten mit "sch" dürften nicht gefiltert werden
      2. Wörter, in denen "sch" vorkommt und die auf "-eis" enden, müssten dann dahingehend geprüft werden, ob es nicht normale Wörter sind. Aber was sind normale Wörter ? Sind normale Wörter vielleicht auch nur falsch geschrieben ? und und und ...

      weil die Sprache sich eben nicht klar in "Buchstaben, die nur in
      bösen Worten vorkommen" und "Buchstaben, die in guten Worten
      vorkommen" trennen läßt.

      Das bezieht sich auf das eben angesprochene Problem.

      Und wer kein Javascript hat,
      muß sich damit gar nicht rumschlagen. :)

      Diese Möglichkeit habe ich auch schon bedacht. Es ist bei meiner Homepage nur so, dass sie ohne Javascript nicht funktioniert (u.a. wegen clientseitiger Überprüfung von Formularen. Ich wollte ursprünglich auf Javascript verzichten. Als mir aber empfohlen wurde, Formulare client-und serverseitig zu überprüfen, habe ich sie doch aufgenommen)

      Wie vollziehen dann andere Foren diese Filterung ?
      Nur über PHP ?

      Dies wird bei mir auch der Fall sein.

      Gruss, Enrico

      1. Moin!

        Für sinnlos halte ich sie keineswegs. In Foren werden ja auch oft verbotene Wörter - weitesgehend - herausgefiltert.

        Auto-Zensur funktioniert nicht. Punkt.

        Abgesehen davon halte ich deine Aussage "oft" für gewagt. Kennst du mindestens zwei Beispiele, bei denen das groß eingesetzt wird (also mehr als nur der übliche vordefinierte Kram), und tatsächlich wirkt?

        Im Gegenzug werden aber ganz normale Worte auch betroffen sein

        Das ist in der Tat ein Problem, das man aber - wenn auch mit viel Aufwand verbunden - umgehen kann.

        Nein, kann man nicht.

        Du hast exakt zwei grundsätzliche Möglichkeiten: Optimistisch filtern oder pessimistisch filtern.

        Beim optimistischen Filtern erkennst du einige besonders böse Worte und filterst die, nimmst aber in Kauf, dass "Umgehungsversuche" funktionieren. Du filterst hierbei grundsätzlich nur nach kompletten Worten mit eindeutiger Bedeutung. Dementsprechend steht "Scheiß" und "Scheiße" in deiner Liste, das Umgehungswort "SCHE1SS" wird erst dann hinzugefügt, wenn es tatsächlich verwendet wird. Die "Kreativität" der Benutzer fließt also in den Filter ein und fügt immer neue böse Worte hinzu.

        Beim pessimistischen Filtern hast du eine Liste erlaubter Wörter. Alle anderen werden gefiltert. Auf diese Weise kannst du "Kirscheis" als erlaubtes Wort deklarieren.

        Was du dort aber nicht kannst, ist das Verhindern von Codewörtern. Wenn "Kirscheis" in deiner Community die Bedeutung von "Scheiße" erhält, weil es aus irgendwelchen naheliegenden Gründen so ähnlich klingt, hast du natürlich das Problem, legitime Eisesser zu diskriminieren.

        Deshalb ist es in meinen Augen unmöglich, einen Wortfilter zu programmieren, der nur aufgrund der Buchstaben Entscheidungen treffen soll. Und ein Programm, welches die geschriebenen Texte VERSTEHT, existiert noch nicht - nur damit wäre es überhaupt möglich, eine sinnvollen Filter zu bauen.

        Wie vollziehen dann andere Foren diese Filterung ?

        Gar nicht.

        Und man muß es auch nicht. Solange man als Betreiber keine Kenntnis vom Inhalt eines Postings hat, hat man dafür auch keine Verantwortung - die hat immer derjenige, der es geschrieben hat.

        Und wenn man Kenntnis hat, kann man es immer noch löschen.

        Nur über PHP ?

        Dein Problem ist eines, was sich mit Software nicht lösen läßt, solange Computer keine eigene Sprachintelligenz besitzen.

        - Sven Rautenberg

        1. Hallo Sven,

          Gut, schon überzeugt :o)

          Dann werde ich mich von meiner Vorstellung, einen funktionierenden Wortfilter zu programmieren, distanzieren :o)

          Gruss, Enrico

          1. Hello,

            Dann werde ich mich von meiner Vorstellung, einen funktionierenden Wortfilter zu programmieren, distanzieren :o)

            angelehnt an lulus Idee könnte man also eine Datei mit den ganz bösen Worten aufbauen, und die dann mittles

            http://de.php.net/manual/de/function.soundex.php
            oder
            http://de.php.net/manual/de/function.levenshtein.php

            Bei soundex() würde mich interessieren, welche Sprache zugrundegelegt wird oder wie das sonst funktioniert.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
      2. Huhu Enrico

        folgendes Verfahren halte ich nach wie vor für einen guten
        Kompromiss, wobei es mangels "böser" Einträge in den von mir betreuten Gästebüchern/ Foren nicht zum Einsatz kommt.

        Die Annahme dabei ist, dass jemand der bösartige Einträge hinterlässt
        sein Werk nach getaner Arbeit auch gleich anschauen möchte.

        D.h. ein automatischer Filter welcher Einträge unterdrückt steht auf
        verlorenem Posten, denn der "Übeltäter" wird es solange probieren bis er einen Weg gefunden hat den Filter zu umgehen.

        Daher kann man z.B. folgendes machen:

        1. den Eintrag auf verdächtige Wortbestandteile prüfen

        2. wenn alles ok, dann alles ok

        3. wenn nicht alles ok, dann

        3.1. eine Mail mit dem Text des Eintrages an den Betreiber erzeugen

        3.2. den Eintrag in der Datenbank als "suspicious" markieren

        3.3. solche Einträge werden nur an die IP unter der sie eingetragen wurden ausgeliefert

        4. Um ein gelegentliches Prüfen aller Einträge kommt man trotzdem nicht herum

        Das nur so als Idee ...

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Moin!

          folgendes Verfahren halte ich nach wie vor für einen guten
          Kompromiss, wobei es mangels "böser" Einträge in den von mir betreuten Gästebüchern/ Foren nicht zum Einsatz kommt.

          Hehe, das Verfahren gefällt mir. Ist trickreich gemacht.

          Aber wie du schon betonst:

          1. Um ein gelegentliches Prüfen aller Einträge kommt man trotzdem nicht herum

          Und alle Beiträge, die als "verdächtig" gemeldet werden, muß man eben manuell prüfen und freigeben - oder löschen.

          - Sven Rautenberg

        2. Hello,

          3.3. solche Einträge werden nur an die IP unter der sie eingetragen

          Auf den ersten Blick eine spaßige Variante des "Customizing", aber die gilt natürlich nur, solange der "Spamer" noch die IP hält. Sekundenbruchteile später könnte sie doch schon wieder von jemand anders benutzt werden. Oder gibt es da bei den Providern eine Sperrzeit? Könnte ja auch sein, dass die zum Zwecke der ordnungsgemäßen Abgrenzung einen "Rasenstreifen" dazwischenlegen.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Moin!

            Auf den ersten Blick eine spaßige Variante des "Customizing", aber die gilt natürlich nur, solange der "Spamer" noch die IP hält. Sekundenbruchteile später könnte sie doch schon wieder von jemand anders benutzt werden. Oder gibt es da bei den Providern eine Sperrzeit? Könnte ja auch sein, dass die zum Zwecke der ordnungsgemäßen Abgrenzung einen "Rasenstreifen" dazwischenlegen.

            Na und? Natürlich könnte jemand von AOL aus kommen, deren Proxyfarm nutzen, und dann munter bei jedem Request neue IPs haben. Das wäre dann der Sonderfall, bei dem der böse Bube den "Trick" bemerkt und feststellt, dass sein "Angriff" auf die guten Sitten keinen wirklichen Erfolg hatte.

            - Sven Rautenberg

            1. Hello,

              Auf den ersten Blick eine spaßige Variante des "Customizing", aber die gilt natürlich nur, solange der "Spamer" noch die IP hält. Sekundenbruchteile später könnte sie doch schon wieder von jemand anders benutzt werden. Oder gibt es da bei den Providern eine Sperrzeit? Könnte ja auch sein, dass die zum Zwecke der ordnungsgemäßen Abgrenzung einen "Rasenstreifen" dazwischenlegen.

              Na und? Natürlich könnte jemand von AOL aus kommen, deren Proxyfarm nutzen, und dann munter bei jedem Request neue IPs haben. Das wäre dann der Sonderfall, bei dem der böse Bube den "Trick" bemerkt und feststellt, dass sein "Angriff" auf die guten Sitten keinen wirklichen Erfolg hatte.

              Jein. Das ist dann der Extremfall. Aber was ist mit den Millionen von ISDN-Surfern, die auch jedesmal über eine andere IP kommen. Das Problem steckt ja nicht darin, dass jemand _seinen_ Beitrag nicht sieht, sondern dass dieser trotzdem beim nächsten Request schon bei jemand _anderem_ landen könnte, der ihn keinesfalls sehen sollte.

              Customizing funktioniert also nur mit eindeutigen Kennzeichnungen, wie Auth, Zertifikaten, Cookies und all diesen hübschen Dingen, die bei jedem Requeset mitgesendet werden.

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Moin!

                Jein. Das ist dann der Extremfall. Aber was ist mit den Millionen von ISDN-Surfern, die auch jedesmal über eine andere IP kommen. Das Problem steckt ja nicht darin, dass jemand _seinen_ Beitrag nicht sieht, sondern dass dieser trotzdem beim nächsten Request schon bei jemand _anderem_ landen könnte, der ihn keinesfalls sehen sollte.

                Customizing funktioniert also nur mit eindeutigen Kennzeichnungen, wie Auth, Zertifikaten, Cookies und all diesen hübschen Dingen, die bei jedem Requeset mitgesendet werden.

                Es ist ja kein Customizing im eigentlichen Sinne.

                Für wie wahrscheinlich hälst du es, dass ein User einen bösen Gästebucheintrag macht, seine IP dann freigibt, sofort der nächste User dieses Providers dieselbe IP wiederbekommt, exakt die gleiche Seite ansurft, nur um dann den Gästebucheintrag zu sehen.

                Deine sogenannten "eindeutigen" Kennzeichnungen sind auch nur eine Anwendung von Wahrscheinlichkeitsmathematik: Wie wahrscheinlich ist es, dass ein anderer Benutzer sich nicht dieselben Kennzeichen ausdenken kann?

                - Sven Rautenberg

              2. Huhu Tom

                Customizing funktioniert also nur mit eindeutigen Kennzeichnungen, wie Auth, Zertifikaten, Cookies und all diesen hübschen Dingen, die bei jedem Requeset mitgesendet werden.

                Deshalb habe ich das Verfahren ja auch als Kompromiss und nicht als
                100%ige Lösung vorgestellt.

                Da "harte" Barrieren vermutlich den Ehrgeiz des "Bösen Buben" anspornen und daher nicht funktionieren soll hier der "Bube" im Glauben gelassen werden sein unerwünschter Eintrag sei erfolgreich.

                Wenn er später unter anderer IP zurückkehrt wird er erstaunt sein wie schnell der Admin reagiert hat und es evtl. nach einigen weiteren Versuchen aufgeben.

                Natürlich ist der Eintrag weiterhin über die entsprechende Original-IP aufrufbar und wird daher auch an später "mit dieser IP Surfende" ausgeliefert.

                Ein manuelles (nach-)bearbeiten der Einträge (Freigabe/ Entfernen) ist also in jedem Fall erforderlich.

                Es ist nur eine erste automatische Filterstufe welche
                immerhin die Verbreitung solcher Postings etwas einschränkt, wenn auch nicht vollständig unterbindet.

                Die zweite Filterstufe ist dann eine auf Kohlenstoff basierende Bioform ...

                Viele Grüße

                lulu

                --
                bythewaythewebsuxgoofflineandenjoytheday
      3. Hallo,

        ich käme nie auf den Gedanken, den folgenden (fiktiven) Gästebucheintrag filtern zu wollen.

        "das ist aber eine verfickt geile Seite, heilige Scheiße aber auch"

        ;-)))

        Chräcker

        1. Hi Cräcker!

          ich käme nie auf den Gedanken, den folgenden (fiktiven) Gästebucheintrag filtern zu wollen.

          "das ist aber eine verfickt geile Seite, heilige Scheiße aber auch"

          was hälst Du von
          "das ist aber eine ver[PIEP]t geile Seite, heilige [PIIIIIEEEEP] aber auch"
          ;-)

          Grüße
          Andreas

          --
          SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
  3. Hi,

    Nachdem ich nun alle Fehler beseitigen konnte (siehe meinen letzten Thread), bin ich nun dabei, einen Bad-Word-Filter einzubauen.

    Spätestens bei Dingen wie

    BBBB    AAA   DDDD   W   W   OOO   RRRR   DDDD
    B   B  A   A  D   D  W   W  O   O  R   R  D   D
    BBBB   AAAAA  D   D  W W W  O   O  RRRR   D   D
    B   B  A   A  D   D  WW WW  O   O  R  R   D   D
    BBBB   A   A  DDDD   W   W   OOO   R   R  DDDD

    versagen die Automatismen, meist aber schon bei b/a/d/w/o/r/d oder ähnlichem...
    Es gibt zu viele Wege, so einen Automatismus auszutricksen.
    Die Worterkennung im menschlichen Hirn ist einfach zu gut - was für den Menschen noch einfachst zu erkennen ist, ist für ne Maschine schwer.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hello,

      Spätestens bei Dingen wie

      BBBB    AAA   DDDD   W   W   OOO   RRRR   DDDD B   B  A   A  D   D  W   W  O   O  R   R  D   D BBBB   AAAAA  D   D  W W W  O   O  RRRR   D   D B   B  A   A  D   D  WW WW  O   O  R  R   D   D BBBB   A   A  DDDD   W   W   OOO R   R  DDDD

      Ich kann da auch als Mensch nix mehr erkennen ;-)

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau