Seite 1 von 19

Einfache Methode, automatische Registrierungen zu verhindern

Verfasst: 14.05.2006 09:46
von TK
Mich hat es wahnsinnig geärgert, dass sich bei mir immer mehr automatische Registrierungen durch Bots trotz aktivierter visueller Bestätigung anhäuften...
Als ich bemerkte, dass sich die ersten sogar per E-Mail erfolgreich aktivierten, wollte ich endlich etwas dagegen unternehmen und hab mir hier im Forum verschiedene Lösungsansätze angeschaut, die mich aber alle nicht vollends überzeugt haben: Entweder waren dann die Bestätigungs-Codes nur noch schwer zu erkennen/erraten, oder die nötigen Änderungen am PHP-Code erschienen mir einfach viel zu überdimensioniert und umständlich für dieses "kleine" Problem.

Also habe ich mir in meinen Server-Logs die Registrierungen der Bots näher angeschaut, wobei mir eines aufgefallen ist: Allesamt haben sie vorher keine andere Seite besucht, sondern sind zuallererst direkt auf die Seite /profile.php?mode=register&agreed=true gegangen, um dann das Bild mit dem Bestätigungs-Code nachzuladen.
/profile.php?mode=register&agreed=true wurde in allen Fällen allerdings immer nur via GET angefordert, was mich auf eine Idee brachte: Die einfachste Lösung ist es doch, ein "true" der Variable "agreed" nur noch via POST-Übergabe zu akzeptieren. Dazu musste ich nur die folgende kleine Änderung in /includes/usercp_register.php durchführen:

Suche:

Code: Alles auswählen

if ( $mode == 'register' && !isset($HTTP_POST_VARS['agreed']) && !isset($HTTP_GET_VARS['agreed']) )
und ersetze mit:

Code: Alles auswählen

if ( $mode == 'register' && !isset($HTTP_POST_VARS['agreed']) )
Dann muss nur noch das Template der Registrierungs-Seite angepasst werden, dass "agreed" auch via POST anstatt nur mit GET (also durch ein hidden-input-Feld anstatt bloß durch Anhängen an die URL) gesetzt wird.
Das geht am besten, indem die Text-Links für "Ich stimme zu / Ich stimme nicht zu" durch anklickbare Formular-Buttons ersetzt werden.

Ich benutze das (leicht modifizierte) subSilver-Template, bei dem dafür folgende Änderungen in /templates/subSilver/agreement.tpl nötig sind:

Suche:

Code: Alles auswählen

<td><span class="genmed"><br />{AGREEMENT}<br /><br /><br /><div align="center"><a href="{U_AGREE_OVER13}" class="genmed">{AGREE_OVER_13}</a><br /><br /><a href="{U_INDEX}" class="genmed">{DO_NOT_AGREE}</a></div><br /></span></td>
und ersetze mit:

Code: Alles auswählen

<td><span class="genmed"><br />{AGREEMENT}<br /><br /><br /><div align="center"><form method="post" action="{U_AGREE_OVER13}"><input type="hidden" name="agreed" value="true"><input type="submit" class="mainoption" style="width:700px; border:2px solid" value="{AGREE_OVER_13}"></form><br /><form method="post" action="{U_INDEX}"><input type="submit" class="mainoption" style="width:700px; border:2px solid" value="{DO_NOT_AGREE}"></form></div><br /></span></td>
Da ja innerhalb von Buttons keine extra Schrift-Formatierungen via HTML funktionieren, sollte entweder die entsprechende Stelle in der /language/lang_german/lang_main.php insofern abgeändert werden, dass die <b></b>-Formatierungen entfert werden, also z.B. in

Code: Alles auswählen

$lang['Agree_over_13'] = 'Ich bin mit den Konditionen dieses Forums einverstanden und MINDESTENS 12 Jahre alt.';
, oder aber {AGREE_OVER_13} wird direkt im Template agreement.tpl durch den gewünschten Text ersetzt...


Mehr Änderungen sind nicht nötig, und seitdem sind keine automatischen Bot-Registrierungen mehr aufgetreten (obwohl sie es nach wie vor immer noch fleißig versuchen, wie ich es an meinen Server-Logs sehen kann... vergeblich :D )


Um zu sehen, ob die Änderungen bei euch geklappt haben, testet es dann einfach mal und gebt [euerForum]/profile.php?mode=register&agreed=true direkt in die Adresszeile ein: Nun sollte trotz &agreed=true immer nur noch die Seite geladen werden, wo man die Bedingungen erst noch akzeptieren muss. Erst wenn man wirklich auf das Formular-Button "Ich akzeptiere" klickt, gelangt man (oder der böse Regsitrierungs-Bot) auf die "richtige" Registrierungsseite.

Nichtsdestotrotz die übliche Warnung: Macht erst Backups, bevor ihr meine Änderungen durchführt.


Wichtig: Die visuelle Bestätigung durch Code-Eingabe sollte trotz Änderungen weiterhin aktiv bleiben, damit (ältere) Registrierungs-Bots, die es noch direkt via POST versuchen, weiterhin abgeblockt werden!

Verfasst: 14.05.2006 10:06
von Pathologe
Hört sich sehr gut an, Gott sei Dank hatte ich bis jetzt noch nie Probs mit Bots....

Aber wieso kann man nicht endlich mal rausfinden, wer diese verdammten Dinger losschickt! Geht das alles über Proxys und ist somit nicht rückzuverfolgen? Oder stehen diese Firmen oder Leute die das machen irgendwo in Russland, CHina, oder KA wo, wo man eben nichts dagegen unternehmen kann!?

Man sollte diese Leute echt anzeigen, was die für Schaden anrichten ist einfach nur schlimm!!!

Gruß

Verfasst: 14.05.2006 11:14
von TK
Eine weitere Idee:

Dieses Prinzip nämlich könnte man übrigens in abgeänderter Form auch für Boards nutzen, wo man automatische Spam-Beiträge durch den Gastzugang verhindern will: Man könnte (nur bei Gästen sichtbar und nötig) ein "Häkchen-Feld" in das Beitrag-Verfassen-Formular ergänzen, das angekreuzt werden muss, damit der Gastbeitrag online gestellt wird. Neben dem Häkchen könnte z.B. stehen, dass man die Nutzungsbedingungen und -regeln des Boards akzeptiert. (Somit hätte man zwei Fliegen mit einer Klappe geschlagen ;), denn das ist unabhängig vom Unterbinden von Spam-Beiträgen auch aus rechtlicher Sicht sinnvoll = damit nicht nur registrierte Mitglieder die Nutzungsbedingugnen akzeptieren müssen, sondern auch die Gäste...)

So eine Lösung wäre in meinen Augen sinnvoller, effektiver, eleganter und weniger nervend für die "echten" Gäste, als jedesmal einen visuellen Bestätigungs-Code eingeben zu müssen (denn so einen MOD gibt es ja bereits für Gastbeiträge).

Vielleicht setze ich mich mal demnächst daran und versuche, das umzusetzen. Momentan ist mein Board allerdings wegen Vandalismus für schreibende Gäste gesperrt; kann also evtl. noch dauernd, bis ich das in Angriff nehmen würde...

Pathologe hat geschrieben:Aber wieso kann man nicht endlich mal rausfinden, wer diese verdammten Dinger losschickt!
Geht das alles über Proxys und ist somit nicht rückzuverfolgen? Oder stehen diese Firmen oder Leute die das machen irgendwo in Russland, CHina, oder KA wo, wo man eben nichts dagegen unternehmen kann!?
Man sollte diese Leute echt anzeigen, was die für Schaden anrichten ist einfach nur schlimm!!!
Im Prinzip kann man es dank der IPs in den Server-Logs zumindest versuchen, die Verursacher ausfindig zu machen. In den meisten Fällen stehen die Server allerdings tatsächlich in "exotischeren" Staaten, u.a. solche wie von dir genannte, was die Strafverfolgung extrem erschwert bis aussichtlos macht...

Aber immer öfter lassen die Spammer ihre Bots auch auf gekaperten Rechnern laufen. Selbst wenn du die IP zurückverfolgen kannst, landest du oft bei irgendwelchen Betrieben/Unis/Privatleuten, die gar nichts davon wissen, was da auf ihren Servern geschieht. Was diese Leute natürlich auch bei Nichtwissen nicht prinzipiell von einer Mitstörer-Haftung ausschließt, wenn sie dem durch mangelnde Sicherheitsvorkehrungen zumindest fahrlässig Vorschub geleistet haben.
Die wahren Verursacher wirst du aber mit höchster Wahrscheinlichkeit kaum erreichen können.

Ich habe aber auch bemerkt, dass immer öfter ganze Bot-Netzwerke (von gekaperten Rechnern) genutzt werden, wo sich mehrere übers Internet zusammengeschaltete Rechner die Aufgaben "teilen" (und dabei jeweils auf dem ganzen Globus verteilt sein können):

Als Beispiel ein (!) protokollierter Registrierungs-Versuch bei mir (zu einem Zeitpunkt, als ich meine hier beschriebenen Änderungen noch nicht durchgeführt hatte, und der dadurch "erfolgreich" war :evil:):
www.anon-proxy.de - - [20/Apr/2006:02:11:48 +0200] "GET /profile.php?mode=register&agreed=true HTTP/1.1" 200 26037 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1"
**-174-162-***.frdrmd.adelphia.net - - [20/Apr/2006:02:11:58 +0200] "GET /profile.php?mode=confirm&id=a669ac8ac8b4e200d93d842e95f9818f&sid=ac1acc329a642c0f7624d00756805b12 HTTP/1.1" 200 14981 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1"
***.tsinghua.edu.cn - - [20/Apr/2006:02:12:18 +0200] "POST /profile.php?sid=ac1acc329a642c0f7624d00756805b12 HTTP/1.1" 200 15258 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1"
Wie man sehen kann, waren drei verschiedene Hosts (und damit vermutlich auch 3 versch. Rechner) für einen einzigen (!) Registrierungsversuch beteiligt: der erste (über den deutschen Anonymisier-Proxy-Dienst www.anon-proxy.de) lädt direkt die ("akzeptierte") Registrierungs-Seite, der zweite (Provider Adelphia - aus den USA) lädt das Bild mit dem Bestätigungs-Code nach und der dritte (aus der chinesischen Uni Tsinghua in Peking) schickt dann wiederum die gesammelten Daten via POST ab... :-?

Verfasst: 14.05.2006 12:01
von morf
hallo,

danke erstmal für diese klasse lösung... hab sie gerade eingebaut, wird sich ja in ein paar stunden/tagen herausstellen ob sich noch bots anmelden :)

allerdings hab ich jetzt nen kleinen anzeigefehler beim register, vielleicht kannst du mir da ja weiterhelfen :oops:

[ externes Bild ]

Verfasst: 14.05.2006 12:09
von TK
Sorry, das hab ich völlig vergessen zu erwähnen... :oops: (In Buttons funktionieren ja keine Extra HTML-Formatierungen)

Entweder du ersetzt die entsprechende Stelle in der /language/lang_german/lang_main.php (und nimmst die HTML-Formatierungen <b></b> raus, z.B. $lang['Agree_over_13'] = 'Ich bin mit den Konditionen dieses Forums einverstanden und MINDESTENS 12 Jahre alt.'; ), oder du änderst es direkt im Template und ersetzt {AGREE_OVER_13} mit dem gewünschten Text...


P.S.: Wichtig: Die visuelle Bestätigung durch Code-Eingabe sollte trotz Änderungen weiterhin aktiv bleiben, damit (ältere) Registrierungs-Bots, die es noch direkt via POST versuchen, weiterhin abgeblockt werden!

Verfasst: 14.05.2006 12:50
von morf
vielen viele dank 8)

Verfasst: 15.05.2006 14:01
von TK
Bitte ;)

Ich würde mich freuen, wenn du (und andere, die es anwenden) hier demnächst berichten würdet, ob es klappt und die BOT-Anmeldungen ausbleiben...

Verfasst: 21.05.2006 09:09
von vc Herbert
Moin,

ich habe angefangen in den Foren die ich verwalte, die Emailadressen dieser Spamer zu bannen, d.h. den Namen habe ich durch ein * ersetzt und dann entsprechend die ganze Domain gebannt.

Bisher war dies von Erfolg gekrönt.

Ich hebe vier Domains gebannt und seither keine Botanmeldungen mehr in den Foren gehabt.

bisher gebannte:

Code: Alles auswählen

*@bk.ru
*@mail.ru
*@yandex.ru
*@mail.com

Verfasst: 02.12.2006 03:01
von TK
Zwischenbericht: Seit dem Einbau gab es bei mir keine einzige Bot-Registrierung mehr... (obwohl es laut Server-Logs pro Tag ca. 30-40x versucht wird)
Vielleicht setze ich mich mal demnächst daran und versuche, das umzusetzen.
Inzwischen habe ich auch eine effektive Methode eingebaut, wie trotz Gastschreibrechts keine Spam-Beiträge mehr durchkommen (und das ohne VC-Code für Gäste), selbst wenn die posting.php-Seite von den Bots vorher geparsed wird. Falls Interesse an der Lösung besteht, kann ich sie hier ebenfalls online stellen.

Verfasst: 02.12.2006 10:13
von Miriam
Super Umsetzung!

Und die Sache mit den Gastpostings würde mich interessieren... Nicht weil Gäste bei mir posten dürfen, sondern der techn. Umsetzung wegen.

Einen kleinen Haken hat Dein Code allerdings. ---> Wenn dere böse Bot so clever geworden ist, weil sein "Papa" oder seine "Mama" ihn in Kenntnis Deiner Anpassung so programmiert haben, dass er den POST auch übergeben kann, wäre es doch sinnvoller, die POST-Variable nicht agreed zu nennen, sondern *was weiss ich* agree_22mh.
Das müsste dann logischerweise auch in der POST Abfrage angepasst werden.