tas2580
Blog über Webentwicklung

phpBB vor Spam schützen

tas2580  

Eigentlich wollte ich ja was über die Sicherheit von phpBB bloggen, aber aus aktuellem Anlass verschiebe ich das auf später und schreibe erst mal was zum Thema Spam in Foren. Um sich effektiv gegen Spam zu wehren muss man sich klar machen warum überhaupt gespammt wird, wo der Spam herkommt und wie das technisch funktioniert.

Warum wird in Foren gespammt?

Google und andere Suchmaschinen bewerten die Wichtigkeit von Seiten an Hand der eingehenden Links, wenn also eine Seite von vielen anderen Seiten verlinkt wird wird sie in den Suchergebnissen höher eingestuft. Das bedeutet für den Seitenbetreiber mehr Besucher und mehr Umsatz. Da es nicht einfach ist freiwillige Links auf schlechte Seiten die nur dazu ausgelegt sind Geld zu machen zu bekommen muss man eben selber für Links sorgen. Eine Möglichkeit kostenlos schnell an Links zu kommen währe Spam auf anderen Webseiten die Besuchern ermöglichen Content zu erstellen, also z.B. Foren. Ein guter Bot kann locker mehrere Tausend Einträge mit Links pro Tag in Foren schreiben, die Sache ist also eine recht gute Möglichkeit um Links zu bekommen. Natürlich werden solche Spam-Beiträge oft recht schnell von den Forenadmins wieder gelöscht, es gibt aber auch immer wieder Foren um die sich niemand mehr kümmert und dort bleiben die Links dann stehen. Wer also tausende Spam-Beiträge mit Links in Foren absetzt hat nachher immer noch ein paar Links die stehen bleiben und wahrscheinlich irgendwann von den Suchmaschinen gewertet werden.

Wie funktioniert Forenspam technisch?

Es gibt 2 Möglichkeiten wie die Spam-Beiträge in ein Forum kommen, einmal gibt es Leute die gegen Bezahlung Beiträge schreiben und dann gibt es Bots (Computerprogramme) die das automatisch tun. Gegen menschliche Spammer kann man oft nicht viel tun da die eigentlich jede Art von CAPTCHA umgehen können, aus diesem Grund gibt es in Ländern wie China oder Korea Firmen die in mehreren Schichten Leute beschäftigen die den ganzen Tag damit verbringen sich in Foren anzumelden und Beiträge mit Links zu schreiben, solche Spammer kann man oft nur an der IP-Adresse erkennen. Gegen die Bots kann man sich da schon eher währen da sie immer einem vorgegebenen Muster folgen. Bots sind deutlich billiger wie Menschen und arbeiten oft viel schneller, deshalb wird die Entwicklung von Bots auch von den Spammern immer voran getrieben. Also schauen wir uns mal an wie so ein Bot funktioniert. Als erstes braucht er eine Datenbank in der URLs zu Foren stehen die für Spam missbraucht werden können, dazu geht der Bot zu einer Suchmaschine und sucht da z.B. nach “Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group” und schon hat er eine Liste mit phpBB3 Foren die er in seine Datenbank schreiben kann. Jetzt kommt der nächste Bot der Accounts in den gesammelten Foren anlegt, dazu sendet der Bot einfach einen HTTP Header an das Forum der so aussieht als ob das Formular ausgefüllt und abgesendet wurde. Ein Header der ein ausgefülltes Registrierungsformular von einem phpBB3 sendet sieht in etwa so aus:

>POST /ucp.php?mode=register HTTP/1.1
Host: www.domain.tld
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.5) Gecko/2008121623 Ubuntu/8.10 (intrepid) Firefox/3.0.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.domain.tld/ucp.php?mode=register
Cookie: style_cookie=null; forum_sid=0ff79fa43bee51b69df19d3ef8240deb
Content-Type: application/x-www-form-urlencoded
Content-Length: 338
username=tobi&email=user%40server.tld&email_confirm=user%40server.tld&new_password=geheim&password_confirm=geheim&confirm_code=1WYLBXN4&
greed=true&change_lang=0&confirm_id=d1a93a47e9c49f5009dccf600002e287&submit=Absenden&creation_time=1234550559&form_token=a23c6252a3edd80da059076e5b9bf04a9867d44d

In der ersten Zeile wird angegeben an welche Datei das Formular gesendet werden soll, in der zweiten an welche Domain. Die 3. bis 7. Zeile enthält Angaben zum Browser, da man da aber hin schreiben kann was man möchte lässt sich daraus natürlich nicht erkennen ob der Benutzer wirklich wie hier Firefox benutzt oder nur so tut als ob. In Zeile 11 wird das Cookie übermittelt, da für eine Anmeldung aber noch kein Cookie nötig ist wird das auch funktionieren wenn man in der Zeile einfach nichts übergibt. Interessant ist Zeile 14, da werden die Daten die im Formular eingegeben wurden übergeben, zusätzlich gibt es noch einige Daten die phpBB schon von Haus aus mit sendet um Spam zu verhindern. Man sieht hier wunder schön immer den Namen des Formularfelds und dahinter den eingetragenen wert, auch das Passwort wird hier in Klartext übergeben. Solche Header könnte man jetzt theoretisch im Sekundentakt an ein Forum senden und so einen Benutzer nach dem anderen anlegen ohne einmal das Registrierungsformular aufzurufen. Bei phpBB hat man jetzt als Bot natürlich das Problem das man einen gültigen CAPTCHA Code und Token übergeben muss. Der Bot muss also das Formular aufrufen, den Quelltext parsen um den Token auszulesen und das CAPTCHA entziffern bevor er einen Benutzer anlegen kann. Nachdem der Benutzer erfolgreich angelegt wurde schreibt der Bot die Benutzerdaten in seine Datenbank um sie dem eigentlichen Spambot zur Verfügung zu stellen. Der letzte Teil des Bots nimmt sich aus der Datenbank ein Forum und die dazu gehörigen Benutzerdaten und meldet sich im Forum an um Beiträge schreiben zu können. Dazu sendet er auch ähnlich wie bei der Registrierung immer nur die entsprechenden Header.

Wie kann man sich gegen Spam im Forum wehren?

Gegen Menschlichen Spam kann man sich so gut wie gar nicht wehren da ein Forum ja für Menschen gedacht ist und deshalb auch für Menschen zugänglich sein muss. Man kann höchstens IP Ranges aus Ländern die für Spam bekannt sind sperren oder bei der Registrierung eine Frage einbauen die nur beantwortet werden kann wenn der Benutzer deutsch kann (in einem deutschsprachigem Forum sollte er das ja eh können), das würde dann menschlichen Spammern aus fernen Ländern das registrieren unmöglich machen oder zumindest erschweren. Auf jeden Fall sollte man die Aktivierung durch den Benutzer einschalten da so sichergestellt wird das zumindest die angegebene E-Mail Adresse existiert und vom Benutzer abgerufen werden kann. Adressen von Freemail Anbietern wie web.de oder gmail zu sperren kann auch einigen Schutz bringen, allerdings sperrt man so recht schnell auch echte Benutzer aus die einen Freemail Account verwenden. Gegen Bots kann man sich schon viel einfacher wie gegen menschliche Spammer wehren da sie immer einem vorgegebenen Muster folgen. Wie man im Beispiel oben sieht übergibt der Bot im Header alle Formularfelder die es im Registrierungsformular gibt, wenn man jetzt ein eigenes Formularfeld anlegt das ausgefüllt werden muss wird ein Bot daran also scheitern da er das Feld nicht kennt und keinen Wert dafür übergeben kann. Ein Feld wie z.B. das für die Homepage auszubauen was oft geraten wird bringt übrigens nicht viel da der Bot einfach die Daten dafür trotzdem übergibt und zu viele Daten erstmal nichts ausmachen, eine Registrierung währe also trotzdem möglich. Die Sache mit den eigenen Formularfeldern funktioniert allerdings nur bei Bots die einfach die Standartdaten eines phpBB verschicken und nicht vorher das Formular parsen um nach Feldern zu suchen die sie ausfüllen können. Da ein Bot das Formular eh aufrufen muss um Token und CAPTCHA auszulesen und phpBB3 die Möglichkeit bietet eigene Formularfelder per ACP anzulegen erkennen moderne Bots mittlerweile auch eigene Profilfelder und der Schutz greift nicht mehr bei allen Bots. Wenn man das allerdings umdreht hat man einen recht guten Schutz, ein Bot füllt meistens immer jedes Feld aus das er findet, also baut man ein Feld ein das nicht ausgefüllt werden darf und versteckt es per ausgelagertem CSS damit es von menschlichen Besuchern erst gar nicht gesehen wird. Wichtig ist das man das Feld im Quellcode ganz normal bei den anderen Formularfeldern platziert und per ausgelagertem CSS versteckt da ein einfaches hidden Feld viel zu einfach für einen Bot zu erkennen währe. Noch besser währe es natürlich wenn man die Bots erst gar nicht auf sein Forum lassen würde, dazu muss man sie aber erkennen und da fast jeder Bot einen “normalen” Useragent vortäuscht bleibt dazu eigentlich nur die IP-Adresse. Wer ein deutschsprachiges Forum betreibt kann also sämtliche IPs außer die der deutschsprachigen Länder komplett sperren wenn man auf Trafic aus dem sonstigen Ausland verzichten kann. Wer nicht ganz so radikal vorgehen will kann sich bei Projekten wie Bot Trap (Hallo Marc ;) ) anmelden, da werden IP Adressen von bekannten Spammern gesammelt und dann per Script automatisch gesperrt. Da es allerdings auch Botnetze gibt die sich auf schlecht Geschützen Rechnern normaler Leute einrichten kann man per IP Adresse nie alle Bots sperren, einen großen Teil hält man sich dadurch allerdings trotzdem fern.

Nochmal zusammengefasst wie man sich am besten gegen Bots wert:

  • Eigene Formularfelder anlegen
  • Formularfelder umbenennen
  • Aktivierung durch Benutzer aktivieren
  • CAPTCHA aktivieren
  • IP-Adressen sperren
  • Versuchen so weit wie möglich vom Standart abzuweichen

Ähnliche Beiträge


Kommentare


Bitte warten ...

Kommentar schreiben

URLs werden automatisch umgewandelt.
[b]DEIN TEXT[/b] für Fett gedruckt
[quote]DEIN ZITAT[/quote] für Zitate
[code]DEIN CODE[/code] für Code
captcha