| 

.NET C# Java Javascript Exception

5
Je einfacher man es den echten Benutzern macht, desto einfacher macht man es natürlich auch Bots und Scriptern, die Seite anzugreifen.
Da wir zur Zeit noch eine Recht familäre Runde sind, würde mich eine Diskussion und eine Meinung von euch brennend interessieren.

Mir persönlich fallen folgende Sachen ein:


  • CAPTCHA: Nicht machbar ohne den User penetrant zu nerven, imho ein Nogo!

  • NoBot: Sehr interessant, jemand Erfahrung damit?

03.08.2009
Felix 490 1 9
5 Antworten
6
Um es vorweg zu sagen: Jede Maßnahme, die nicht menschliche Intelligenz, bzw. den Gebrauch menschlicher Sinne erfordert ist für Bots mit heutigen Mitteln relativ einfach zu umgehen. In dem Sinne ist das Captcha (je nach Stärke) immer noch der beste Schutz gegen Bots.
Es gibt natürlich Möglichkeiten, seinen "echten" Nutzern einen Schritt entgegen zu kommen.
1. Alle Feldnamen werden dynamisch erzeugt und über eine Session zugeordnet. Das schützt natürlich nicht vor Bots, die zuerst das Formular aufrufen und die Felder "on the fly" auslesen.
2. Im Formular wird ein hidden-Feld mit "Geheimzahl" eingebaut. Dieses Feld wird jedoch per Javascript vor dem Post entfernt (so das es NICHT mit übertragen wird). Kommt das Feld in der Scriptverarbeitung dann doch an, hat man in jedem Fall einen Client ohne aktives JS vor sich und kann - mit einem freundlichen Hinweis auf erhöhte Sicherheit - nachträglich zum Abtippen eines Captcha auffordern.
3. Gleiches Verfahren wie unter 2., jedoch mit einem normalen Input-Feld, welches per CSS verborgen (oder mit dem Text "Bitte dieses Feld leer lassen" versehen) wird. Ist es ausgefüllt -> siehe 2.
Die Liste mit solchen Bot-Fallen liese sich noch weiter fortsetzen, sie haben aber alle eines gemeinsam: Sie setzen immer voraus, das der Bot etwas tut (z.B. ALLE Felder ausfüllen) bzw. nicht tut (z.B. JS ausführen oder CSS parsen) was sich in der nächsten Bot-Generation dann durchaus ändern kann und man "ärgert" auch immer einen gewissen Prozentsatz der "echten" Nutzer.
04.08.2009
FalkP 3,2k 2 8
1
Wahrscheinlich wäre eine Kombination aus 1 und 3 nicht schlecht. Dann bleibt dem Bot eigentlich keine Wahl als Alles auszufüllen. Leider steht halt im css display: none (oder visibility:hidden) drin und so könnte man wieder drauf schließen, dass man da nichts Eintragen darf. ;)
Felix 04.08.2009
1
Wenn das CSS in einer externen Datei liegt, dann muß der Bot schon zusätzlich allen <link>-Tags folgen und das CSS komplett parsen, was relativen Aufwand bedeutet.
FalkP 05.08.2009
5
Ja, mein Vorschlag in diesem Fall hier wäre, dass das Formular für "Deine Antwort" und "Kommentieren" nur den User angezeigt wird, der eingeloggt ist. Andernfalls vielleicht ein Link setzen, der sich "Antworten" nennt und dieser dann auf die Registrierung verweist. Bei der Registrierung kann man dann auf jedenfall ein Captcha einbauen, das nervt niemanden : )
04.08.2009
Mario Priebe 5,8k 2 9
1
Ich denke so könnte ein akzeptabler Kompromiss aussehen. Vielleicht noch in Verbindung mit NoBot oder den Methoden von FalkP
Felix 04.08.2009
2
Wobei das Registrieren auch nicht immer jedermanns Sache ist. Ich z.B. tippe lieber ein Captcha ab, statt mich umständlich zu registrieren, um dann einmal meinen Kommentar abgeben zu können. (Wenn ich dies regelmäßig tue - wie hier - dann ist es noch was anderes.;)
FalkP 12.08.2009
1
Nun, der Link kann ja zu einer Weiche führen.
"Sie können direkt kommentieren in dem Sie dieses Captcha ausfüllen der diese Sicherheitsabfragen in Zukunft vermeiden indem sie sich registrieren und eingeloggt posten."
TSc 07.09.2009
2
@BIX
Da müsste man allerdings in /badbot auch eine Tarpit installieren. Entsprechende Projekte gibt es überall im Netz, vor einigen Jahren hat das Linux Magazin da einen schönen Artikel über Teergruben für solche Bots gezeigt. Mit etwas Kreativität macht das sichlich sinn.

Allgemein gibt es allerdings schlauere Sachen als Captchas. Eine kleine Datenbanktabelle mit Fragen und Antworten, die on the fly eingebunden wirkt Wunder.
Die Fragen können von "Welche Farbe hat ein Elefant?" bis irgendwelche Synonyme reichen. Die Hürde hat bisher noch kein Bot überwunden, weil es einfach nicht möglich ist.

Es reicht in 90% der Fälle allerdings, ein Options-Feld einzubauen mit der Frage "Bist du ein Mensch?" der per Default auf Nein steht. Jeder der sich registrieren oder etwas Posten möchte muss dann eben das Feld auf Ja setzen. Primitiv einfach, hat allerdings oft geholfen bei uns.
Auch die Version mit dem Leeren Feld ist einfach und sehr effektiv, wenn der User es vielleicht noch leeren muss. Wobei man nie 100% rausfiltern kann.

Projekte die nur Anhand von Hostnamen, IP´s oder Browserkennungen arbeiten bringen selten etwas. Hier müsste ich eine Aufwändige Layer 7 Firewall wie Mod_Security Programmieren, die auf solche Crawler reagiert und on-the-fly eine Datenbank pflegt, ähnlich wie bei Postgrey sozusagen. Das kann ich aber eben Ressourcenschonender haben.


Edit:
Künstlerisch wie man so ist, kann man auch ein Gästebuch "faken" und das Teergrubenprinzip weiterentwickeln. Sozusagen unendlich tiefe Verschachtelungen zu meinen "Gästebüchern", die keine Daten speichern, sondern extrem langsam die Anfragen entgegennehmen und dann mit Fehlercode 500 Antworten oder einfach Antwortcode 200 für das Erfolgreiche einreichen einer "Nachricht", aber diese nur im Speicher hatten und gleich löschen mit dem Lebensende der Semaphore. Denke da kann man seiner Fantasie freien Lauf lassen. Da ich selbst zur Zeit nur noch "Trackbacks" in meinem Blog bekomme werd ich das System mal aus Spaß basteln.

Ziel ist es ja nur das man seine Domain auf die Blacklist der Spammer bekommt und in Ruhe gelassen wird. Was gibt es einfacheres als die Ressourcen der Spammer zu verzehren für nichts? Nur das Verzeichniss und den Link sollte man immer mal anpassen damit Spammer nicht dummerweise diesen Link aussperren.

Grüße
08.09.2009
Lord_Pinhead 496 5
1
Was auch helfen könnte wäre in der robots.txt ein Disallow Eintrag auf ein Script, das den Besucher dauerhaft sperrt.

Beispiel:
Disallow: /badbot


Wenn nun ein Bot der sich nicht an die robots.txt hält, diesen Eintrag dennoch aufruft verdient er es gesperrt zu werden, das sind die Traffic verursachenden Spider die kein Mensch braucht.

Natürlich hilft diese Variante nicht's gegen Spamer & Co.
07.09.2009
BiX 149 1 4
1
Die Ansätze von FalkP sind meiner Meinung nach sehr gut geeignet.
Aus meiner eigenen Erfahrung kann ich nur empfehlen selbst am Abll zu bleiben. Logs analysieren und reagieren. Wirklich erfolgreiche Präventivmaßnahmen gibt es.

Um Bots auszusperren hilft natürlich eine Blacklist innerhalb der Firewall oder notfalls auuch per Serverscript, da Bots sehr häufig nur einen kleinen Kreis von IPs benutzen.

Die Scripter sind natürlich etwas schwieriger zu fassen.
Hier hat sich im Falle eines Browsergames, das ich betreue, gezeigt, daß eine zeitliche Zugriffsbeschränkung ( Anfragen nur im 3 Sekunden-Abstand) und die automatisierte Analyse der Transaktionen einen Großteil der Übeltäter entlarven kann.
Um eine geeignete automatische Analyse zu entwerfen muß man natürlich erstmal die Verhaltensweisen der Scripte "per Hand" analysieren.

Da die Scripter und "Botter :)" ja auch nicht schlafen, muß man sich von anfang klar darüber sein, daß das Ganze zu einem ewigen Katz und Maus Spiel ausartet.
08.09.2009
MiW 1,0k 7
1
Wenn ich so meine Logs durchkucke sind die Spammer oder Bots eher Zombies in einem Botnetzwerk. 20000 Spamanfragen in den Gästebüchern von unseren Kunden können nicht lügen ;)
Auch wäre es möglich das die Botter sich immer nur neu einwählen, ich finde da sehr oft den selben Provider bei den Hostnames.
Lord_Pinhead 11.09.2009

Stelle deine Best-practice-Frage jetzt!
Sevitec Gruppe
InnoGames GmbH
infounit Software GmbH
myfactory International GmbH