PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neues Mitglied und Gedanken für einen Spamschutz



m-ichael
23.12.2006, 07: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

heinerle
23.12.2006, 09:58
Keine schlechte Idee, allerdings ist das unter dem Gesichtspunkt der Zugänglichkeit für Menschen mit Behinderung auch nicht besonders günstig. Ein Sehbehinderter, der via Screenreader die Seite vorgelesen bekommt wird wohl kaum wissen, welches das n-te Wort ist.

Evtl. besser ist das Stellen von einfachen Aufgaben ("Welche Farbe hat Gras", "Was ergibt drei plus vier" etc.). Dies sollte auch in PHP recht einfach realisierbar sein, evtl kann man bei den Rechenaufgaben die Zahlen als Ziffern und/oder Wörter ausgeben,um es den Bots nicht zu einfach zu machen.

m-ichael
23.12.2006, 18:05
Ein Sehbehinderter, der via Screenreader die Seite vorgelesen bekommt wird wohl kaum wissen, welches das n-te Wort ist.


Stimmt, daran hatte ich noch nicht gedacht. Nunja, vlt. ist es ja so machbar, dass man ihn/sie darauf vorbereiten kann, in Form von einleitenden Satz.
Ist nur eine Sache der Anordnung. Statt erst die Wörter und dann die Frage kann man es ja andersrum machen. Erst die Frage und dann die Wörter ("Bitte tippe aus den nachfolgenden n Wörtern das n. Wort"), somit wäre er auf die Wörter vorbereitet und weiss auch gleich, welches er sich merken sollte/kann.
Die Zahlen natürlich ausgeschrieben, damit der Bot nicht allzuschnell einen Zusammenhang erkennen kann.



Evtl. besser ist das Stellen von einfachen Aufgaben ("Welche Farbe hat Gras", "Was ergibt drei plus vier" etc.). Dies sollte auch in PHP recht einfach realisierbar sein, evtl kann man bei den Rechenaufgaben die Zahlen als Ziffern und/oder Wörter ausgeben,um es den Bots nicht zu einfach zu machen.
Daran hatte ich auch schon gedacht und es ist in der Tat leicht realisierbar.
Es funktioniert ja quasi wie diese endlosen Mini-Quiz Programme. Das wäre eigentlich ein wirklich guter Ansatz nur muss man sich bei der Realisierung auch einmal Gedanken machen. Der Mensch mach Fehler! Ich glaube es ist sehr mühsam, etliche Antworten auf eine Frage zu überprüfen, die alle das Gleiche aussagen, gemeint ist die Rechtschreibung!
grün, gruen => stimmt
gürn, greun => tippfehler, kommt dem lösungswort aber nahe
Man kann es sich wirklich komplex damit machen und auf syntaktisch/semantische Fehler eingehen (wie google's "Meinten Sie: xy" Gedöhns), doch die Realisierung wäre da weitaus schwieriger!

Nunja, aber erstmal Danke für den Hinweis!
Ich werd mich jetzt mal an die Umsetzung des von mir o.g. Verfahrens machen und mal schauen wie einfach/schwer das realisierbar ist.
Als erstes muss ich mich mal um eine Wort-Datenbank bemühen :)

Skeeve
23.12.2006, 21:41
Zusätzlich:
1. Zeitstempel des Servers kodiert mit einbauen
2. Zeitstempel beim Absenden mit aktuellem vergleichen
Wenn es zu schnell kam -> Bot sehr wahrscheinlich.
3. Wenn Du sicher bist, es ist ein Bot
Positive Antwort. Eintrag speichern aber nur für diese IP zurückliefern. So
"denkt" der Bot(-Programmierer) er hätte Erfolg gehabt

Reinhold Jordan
24.12.2006, 09:02
2. Zeitstempel beim Absenden mit aktuellem vergleichen
Wenn es zu schnell kam -> Bot sehr wahrscheinlich.

wenn es zu langsam kam, auch. Also wenn der Bot-Programmierer erfolgreiche Werte nimmt und der Bot dann Tage später damit kommt

Gruß, Reinhold

truelife
24.12.2006, 22:31
Hallo m-ichael,

evtl. sollte man auch über eine Zeitsperre nachdenken, z.B. nach dem 3 erfolglosen Senden durch eine IP Sperrung dieser, besonders, wenn du sagst das der Spam zu 98% von einer IP kam...

Grüße aus Nieder-Olm *wink* :welcome:

truelife

m-ichael
24.12.2006, 22:56
Hallo m-ichael,

evtl. sollte man auch über eine Zeitsperre nachdenken, z.B. nach dem 3 erfolglosen Senden durch eine IP Sperrung dieser, besonders, wenn du sagst das der Spam zu 98% von einer IP kam...

Nunja... im Grossen und Ganzen gibt es kein Allheilmittel bzw. man sollte sich nicht auf eine einzige Massnahme festlegen. Das beste ist halt verschiedene Techniken pseudo-simultan zu benutzen wobei da jedoch die grössere Schwierigkeit ist, sie sinnvoll zu kombinieren ohne den Benutzer zu "belästigen" oder gar zu vergraulen. Ich wollte nicht wirklich erst endlose Prüfungen machen, damit mein Beitrag in einem Forum/Gästebuch angenommen wird.
Das sinnvollste ist, für den "Gast" nur eine, maximal zwei Vorraussetzungen erfüllen zu lassen, der Rest läuft intern ab, ohne das Bemerken des "Gastes"



Grüße aus Nieder-Olm *wink* :welcome:

truelife

Wie klein diese Welt doch ist... ich fahr jeden Tag (nunja, die nächste Zeit wohl eher nicht (Ferien u. Urlaub)) da durch. Haben sie bei euch jetzt endlich mal die Schienen fertig.. das war echt ein Stress in den Ferien. In Hessen fingen die ja eine Woche später an, daher hab ich das volle Programm mitbekommen... Immer die Umsteigerei und bis der Bus endlich mal losgefahren ist als es zurück über Saulheim ging...eine Qual!)

Nunja...ich wünsch euch noch ein Frohes Fest und richtig schöne Weihnachtsfeiertage!