m-ichael
23.12.2006, 06:12
Guten Morgen!
Da ich hier neu bin, stell ich mich erstmal kurz vor.
Mein Name ist Michael, bin 25 und komme aus dem Rheinhessischen Alzey (sprich: Alzei).
Ich mache gerade Abendschule (mittlere Reife) und hab grad die schriftlichen Prüfungen hinter mir *hossa*.
Jetzt ich endlich mal wieder Zeit mich um meine Homepage zu kümmern, doch trat da ein gewisses Problem auf:
Gästebuch-Spam!
Ich wurde von einem Bekannten per eMail darauf hingewiesen (was auch zeigt wie wenig Zeit ich hatte ;) ) und
sah mir die Tabelle an und staunte nicht schlecht, als ich vor lauter Links nichts mehr sehen konnte.
Zum Glück waren 98% der Spam-Einträge von der gleichen IP-Adresse (85.255.118.170) womit ich mit einem
MySQL-Statement eben jene 98% los wurde.
Doch das behob das eigentliche Problem nicht. Dieser Bot versucht immer noch Einträge zu machen und hat es
auch geschafft, bis ich eine Blackliste eingebaut habe.
So, dann machte ich mir natürlich mehr Gedanken darüber wie ich mein Gästebuch effektiver dagegen schützen könnte.
Als erstes fielen mir Captchas ein. Diesen Gedanken verwarf ich wieder, weil ich ein Freund von usability-sites bin
(obwohl ich keine Behinderung habe). Ich recherchierte nach verschiedenen Methoden. Von key-trigger bis zu leeren
form-data feldern, doch irgendwie sagte mir das alles nicht wirklich zu.
Also begann ich mir mal ein paar Gedanken darüber zu machen und hab mir eine kleine AntiSpam-Suppe gekocht.
Mir fiel der Kopierschutz von früheren Spielen ein, der nach einem x. Wort einer Seite aus dem dazugehörigen Handbuch
fragte!
Mich würde eure Meinung dazu interessieren und falls Fragen sind, nur zu!!
Morgen (eigentlich heute) werd ich noch an einer Umsetzung in PHP arbeiten (eine kleine function-sammlung) und
eine Seite einrichten zur Demonstration...
Die Zutaten: 1x Wörterdatenbank, 1x md5 und eine Prise Salz
Verlauf:
Der User/Bot ruft die Seite auf.
Intern (was im script abläuft)
Einlesen der Wörterdatenbank (ob flatfile oder mysql-table spielt erstmal keine Rolle)
Zufällig n Wörter aus dem "Pool" herausholen
Aus den n Wörtern zufällig ein Wort auswählen und dies als Schlüsselwort definieren
Den md5-hash aus dem Schlüsselwort + Salz erzeugen
Extern (was der User/Bot sieht)
Formular ausgeben
Die 5 zufälligen Wörter der Reihenfolge nach ausgeben
Den User mit auffordern, das n. Wort einzugeben
Der User/Bot sendet nun das Formular ab dabei passiert wieder folgendes:
Intern
Auslesen des Schlüsselwortes, welches übertragen wurde.
Aus dem Schlüsselwort + Salz den md5-hash erzeugen und ihn mit dem in den Formular übergebenen hash vergleichen
Gelingt der Vergleich, so können wir eintragen, wenn nicht...tja
Extern
Ausgeben des Status (eintrag gemacht u.s.w.)
Diese Variante hat für mich folgende Vorteile:
1. Ich kann die Funktion, welche mir das Schlüsselwort erzeugt noch weiter ausbauen und komplexer gestalten
z.B. kann man es so umschreiben:
ein Wort wird aus der Liste geholt und wird Buchstabe für Buchstabe durchgegangen.
Für jeden Buchstaben wird ein entsprechendes Wort mit dem gleichen Anfangsbuchstaben aus der Liste geholt.
Natürlich muss dafür sichergestellt sein, dass auch jeder Buchstabe mit einem Wort vertreten ist!
2. Als ich an md5-hash gedacht hab fiel mir auch gleich Rainbow-Tables ein, daher die Variante mit Salz.
Ich glaub zwar nicht, dass so ein Bot auch Gebrauch von Rainbow-Tables macht, aber für den Fall der Fälle
würde Sie ihm auch nicht wirklich viel bringen, das der Aufwand doch wohl zu gross wäre.
3. Wegen der Wortdatenbank dachte ich auch schon, dass der Bot eine haben könnte, das könnte man dahingehend
erweitern, dass es eine Satz-Datenbank ist und das Erzeugen halt dementsprechend anpasst.
(Zeige zufälligen Satz und fordere auf das n. Wort zu schreiben)
Das sind erstmal so die Hauptsachen....
Wichtig war mir einfach, dass ich nicht auf Tables, Captchas mit dynamisch grafischen Inhalten etc. zurückgreifen muss.
Okay, das war jetzt ein verdammt langer Text und ich entschuldige mich, falls einem dabei das Gesicht eingeschlafen ist ;)
Freue mich sehr gern über Anregungen und Vorschläge.
ICQ ist auch kein Problem :)
regards
Michael
Da ich hier neu bin, stell ich mich erstmal kurz vor.
Mein Name ist Michael, bin 25 und komme aus dem Rheinhessischen Alzey (sprich: Alzei).
Ich mache gerade Abendschule (mittlere Reife) und hab grad die schriftlichen Prüfungen hinter mir *hossa*.
Jetzt ich endlich mal wieder Zeit mich um meine Homepage zu kümmern, doch trat da ein gewisses Problem auf:
Gästebuch-Spam!
Ich wurde von einem Bekannten per eMail darauf hingewiesen (was auch zeigt wie wenig Zeit ich hatte ;) ) und
sah mir die Tabelle an und staunte nicht schlecht, als ich vor lauter Links nichts mehr sehen konnte.
Zum Glück waren 98% der Spam-Einträge von der gleichen IP-Adresse (85.255.118.170) womit ich mit einem
MySQL-Statement eben jene 98% los wurde.
Doch das behob das eigentliche Problem nicht. Dieser Bot versucht immer noch Einträge zu machen und hat es
auch geschafft, bis ich eine Blackliste eingebaut habe.
So, dann machte ich mir natürlich mehr Gedanken darüber wie ich mein Gästebuch effektiver dagegen schützen könnte.
Als erstes fielen mir Captchas ein. Diesen Gedanken verwarf ich wieder, weil ich ein Freund von usability-sites bin
(obwohl ich keine Behinderung habe). Ich recherchierte nach verschiedenen Methoden. Von key-trigger bis zu leeren
form-data feldern, doch irgendwie sagte mir das alles nicht wirklich zu.
Also begann ich mir mal ein paar Gedanken darüber zu machen und hab mir eine kleine AntiSpam-Suppe gekocht.
Mir fiel der Kopierschutz von früheren Spielen ein, der nach einem x. Wort einer Seite aus dem dazugehörigen Handbuch
fragte!
Mich würde eure Meinung dazu interessieren und falls Fragen sind, nur zu!!
Morgen (eigentlich heute) werd ich noch an einer Umsetzung in PHP arbeiten (eine kleine function-sammlung) und
eine Seite einrichten zur Demonstration...
Die Zutaten: 1x Wörterdatenbank, 1x md5 und eine Prise Salz
Verlauf:
Der User/Bot ruft die Seite auf.
Intern (was im script abläuft)
Einlesen der Wörterdatenbank (ob flatfile oder mysql-table spielt erstmal keine Rolle)
Zufällig n Wörter aus dem "Pool" herausholen
Aus den n Wörtern zufällig ein Wort auswählen und dies als Schlüsselwort definieren
Den md5-hash aus dem Schlüsselwort + Salz erzeugen
Extern (was der User/Bot sieht)
Formular ausgeben
Die 5 zufälligen Wörter der Reihenfolge nach ausgeben
Den User mit auffordern, das n. Wort einzugeben
Der User/Bot sendet nun das Formular ab dabei passiert wieder folgendes:
Intern
Auslesen des Schlüsselwortes, welches übertragen wurde.
Aus dem Schlüsselwort + Salz den md5-hash erzeugen und ihn mit dem in den Formular übergebenen hash vergleichen
Gelingt der Vergleich, so können wir eintragen, wenn nicht...tja
Extern
Ausgeben des Status (eintrag gemacht u.s.w.)
Diese Variante hat für mich folgende Vorteile:
1. Ich kann die Funktion, welche mir das Schlüsselwort erzeugt noch weiter ausbauen und komplexer gestalten
z.B. kann man es so umschreiben:
ein Wort wird aus der Liste geholt und wird Buchstabe für Buchstabe durchgegangen.
Für jeden Buchstaben wird ein entsprechendes Wort mit dem gleichen Anfangsbuchstaben aus der Liste geholt.
Natürlich muss dafür sichergestellt sein, dass auch jeder Buchstabe mit einem Wort vertreten ist!
2. Als ich an md5-hash gedacht hab fiel mir auch gleich Rainbow-Tables ein, daher die Variante mit Salz.
Ich glaub zwar nicht, dass so ein Bot auch Gebrauch von Rainbow-Tables macht, aber für den Fall der Fälle
würde Sie ihm auch nicht wirklich viel bringen, das der Aufwand doch wohl zu gross wäre.
3. Wegen der Wortdatenbank dachte ich auch schon, dass der Bot eine haben könnte, das könnte man dahingehend
erweitern, dass es eine Satz-Datenbank ist und das Erzeugen halt dementsprechend anpasst.
(Zeige zufälligen Satz und fordere auf das n. Wort zu schreiben)
Das sind erstmal so die Hauptsachen....
Wichtig war mir einfach, dass ich nicht auf Tables, Captchas mit dynamisch grafischen Inhalten etc. zurückgreifen muss.
Okay, das war jetzt ein verdammt langer Text und ich entschuldige mich, falls einem dabei das Gesicht eingeschlafen ist ;)
Freue mich sehr gern über Anregungen und Vorschläge.
ICQ ist auch kein Problem :)
regards
Michael