506 Stimmen

Scripter daran hindern, Ihre Website zu blockieren

Ich habe eine Antwort akzeptiert, aber ich glaube leider, dass wir bei unserem ursprünglichen Worst-Case-Szenario bleiben müssen: CAPTCHA jeder auf Kaufversuche der Mist . Kurze Erklärung: Caching/Webfarmen machen es unmöglich, Zugriffe zu verfolgen, und jede Umgehung (Senden eines nicht gecachten Web-Beacons, Schreiben in eine einheitliche Tabelle usw.) verlangsamt die Website stärker, als es die Bots tun würden. Es gibt wahrscheinlich teure Hardware von Cisco oder ähnlichem, die auf hohem Niveau helfen kann, aber es ist schwer, die Kosten zu rechtfertigen, wenn das CAPTCHA-Verfahren für alle eine Alternative ist. Ich werde später versuchen, eine ausführlichere Erklärung abzugeben und die Seite für künftige Suchende zu säubern (obwohl andere es gerne versuchen können, da es sich um ein Community-Wiki handelt).

Situation

Hier geht es um die Tüten-Mist-Verkäufe auf woot.com. Ich bin der Präsident von Woot Workshop, der Tochtergesellschaft von Woot, die das Design macht, die Produktbeschreibungen, Podcasts und Blogbeiträge schreibt und die Foren moderiert. Ich arbeite mit CSS/HTML und bin mit anderen Technologien nur wenig vertraut. Ich arbeite eng mit den Entwicklern zusammen und habe alle Antworten hier (und viele andere Ideen, die wir hatten) durchgesprochen.

Die Benutzerfreundlichkeit macht einen großen Teil meiner Arbeit aus, und die Website spannend und unterhaltsam zu gestalten, macht den größten Teil der Arbeit aus. Daraus leiten sich die drei folgenden Ziele ab. CAPTCHA schadet der Benutzerfreundlichkeit, und Bots stehlen den Spaß und die Spannung aus unseren Mistverkäufen.

Bots stürmen unsere Titelseite zig Mal pro Sekunde und scannen (und/oder scannen unser RSS) für den Random Crap Sale. In dem Moment, in dem sie das sehen, wird eine zweite Stufe des Programms ausgelöst, die sich anmeldet, auf "I want One" klickt, das Formular ausfüllt und den Mist kauft.

Bewertung

lc : Bei Stackoverflow und anderen Seiten, die diese Methode verwenden, handelt es sich fast immer um authentifizierte (angemeldete) Benutzer, weil die Aufgabe, die versucht wird, dies erfordert.

Auf Woot können anonyme (nicht angemeldete) Benutzer unsere Homepage sehen. Mit anderen Worten, die Slamming-Bots können nicht authentifiziert sein (und sind im Wesentlichen nicht verfolgbar, außer über die IP-Adresse).

Also müssen wir wieder nach IPs scannen, was a) im Zeitalter von Cloud-Networking und Spambot-Zombies ziemlich nutzlos ist und b) angesichts der Anzahl von Unternehmen, die von einer IP-Adresse ausgehen, zu viele Unschuldige erwischt (ganz zu schweigen von den Problemen mit nicht-statischen IP-ISPs und den potenziellen Leistungseinbußen bei dem Versuch, dies zu verfolgen).

Oh, und dass man uns anruft, wäre das schlimmstmögliche Szenario. Können wir sie Sie anrufen lassen?

BradC : Die Methoden von Ned Batchelder sehen ziemlich cool aus, aber sie sind eindeutig darauf ausgelegt, Bots zu besiegen, die für ein Netz von Websites entwickelt wurden. Unser Problem ist, dass die Bots speziell dafür entwickelt wurden, unsere Website zu überwinden. Einige dieser Methoden könnten wahrscheinlich für eine kurze Zeit funktionieren, bis die Skripter ihre Bots so weiterentwickelt haben, dass sie den Honeypot ignorieren, den Bildschirm nach nahegelegenen Labelnamen anstelle von Formular-IDs durchsuchen und eine javascriptfähige Browsersteuerung verwenden.

Nochmals lc : "Es sei denn, der Hype ist Teil Ihres Marketingkonzepts." Ja, das ist er definitiv. Die Überraschung, wenn der Artikel erscheint, sowie die Aufregung, wenn man es schafft, einen zu bekommen, ist wahrscheinlich genauso wichtig oder wichtiger als der Mist, den man am Ende tatsächlich bekommt. Alles, was das Prinzip "Wer zuerst kommt, mahlt zuerst" abschafft, schadet dem Nervenkitzel beim "Gewinnen" des Mistes.

novatrust : Und ich für meinen Teil begrüße unsere neuen Bot-Oberherren. Wir bieten tatsächlich RSS-Feeds an, damit Anwendungen von Drittanbietern unsere Website nach Produktinformationen durchsuchen können, aber nicht vor dem HTML-Code der Hauptseite. Wenn ich es richtig interpretiere, hilft Ihre Lösung Ziel 2 (Leistungsprobleme), indem sie Ziel 1 komplett opfert und sich mit der Tatsache abfindet, dass Bots den meisten Mist kaufen werden. Ich habe Ihre Antwort hochgestuft, weil ich Ihren Pessimismus im letzten Absatz für richtig halte. Es scheint hier kein Patentrezept zu geben.

Die übrigen Antworten stützen sich im Allgemeinen auf die IP-Verfolgung, die wiederum sowohl nutzlos (bei Botnetzen/Zombies/Cloud-Networking) als auch nachteilig zu sein scheint (es werden viele Unschuldige erwischt, die von denselben IP-Zielen kommen).

Gibt es andere Ansätze/Ideen? Meine Entwickler sagen immer wieder "lasst uns einfach CAPTCHA machen", aber ich hoffe, dass es weniger aufdringliche Methoden gibt, um alle tatsächlichen Menschen, die etwas von unserem Mist wollen.

Ursprüngliche Frage

Angenommen, Sie verkaufen etwas Billiges, das einen sehr hohen Wert hat, und Sie haben nur eine sehr begrenzte Menge. Niemand weiß genau, wann Sie diesen Artikel verkaufen werden. Und über eine Million Menschen kommen regelmäßig vorbei, um zu sehen, was Sie verkaufen.

Das führt dazu, dass Skripter und Bots programmgesteuert versuchen, [a] herauszufinden, wann du den besagten Gegenstand verkaufst, und [b] sicherzustellen, dass sie unter den ersten sind, die ihn kaufen. Das ist aus zwei Gründen ätzend:

  1. Ihre Website wird von nicht-menschlichen Nutzern überflutet und verlangsamt die Abläufe für alle.
  2. Am Ende "gewinnen" die Drehbuchautoren das Produkt, wodurch sich die Stammkunden betrogen fühlen.

Eine scheinbar offensichtliche Lösung ist es, einige Hürden zu schaffen, durch die Ihre Nutzer springen müssen, bevor sie ihre Bestellung aufgeben können, aber es gibt mindestens drei Probleme dabei:

  • Die Benutzererfahrung für Menschen ist miserabel, da sie CAPTCHA entziffern, die Katze herauspicken oder eine Matheaufgabe lösen müssen.
  • Wenn der wahrgenommene Nutzen hoch genug und die Menge groß genug ist, wird eine Gruppe einen Weg finden, jede Verbesserung zu umgehen, was zu einem Wettrüsten führt. (Dies gilt umso mehr, je einfacher die Änderung ist; ein verstecktes "Kommentar"-Formular, die Neuanordnung der Formularelemente, eine falsche Beschriftung, ein versteckter "Fauxpas"-Text - all dies funktioniert einmal und muss dann geändert werden, um dieses spezielle Formular zu bekämpfen).
  • Selbst wenn die Skripter Ihren Tweak nicht "lösen" können, hindert sie das nicht daran, Ihre Titelseite zuzuschlagen und dann einen Alarm auszulösen, damit der Skripter den Auftrag manuell ausfüllen kann. Da sie durch die Lösung von [a] im Vorteil sind, werden sie wahrscheinlich trotzdem [b] gewinnen, da sie die ersten Menschen sein werden, die die Bestellseite erreichen. Außerdem tritt 1. immer noch auf, was zu Serverfehlern und einer verminderten Leistung für alle führt.

Eine andere Lösung besteht darin, auf IPs zu achten, die zu oft auftauchen, sie in der Firewall zu blockieren oder sie anderweitig an der Bestellung zu hindern. Dies könnte 2. lösen und [b] verhindern, aber der Leistungseinbruch durch das Scannen nach IPs ist massiv und würde wahrscheinlich mehr Probleme wie 1. verursachen, als die Skripter selbst verursachen. Außerdem macht die Möglichkeit von Cloud-Netzwerken und Spambot-Zombies die IP-Prüfung ziemlich nutzlos.

Eine dritte Idee, nämlich das Laden des Bestellformulars für eine gewisse Zeit (z.B. eine halbe Sekunde) zu erzwingen, würde möglicherweise den Fortschritt der schnellen Bestellungen verlangsamen, aber auch hier wären die Skripter immer noch die ersten, und das bei einer Geschwindigkeit, die für die tatsächlichen Benutzer nicht nachteilig ist.

Ziele

  1. Verkaufen Sie den Gegenstand an Menschen, die keine Skripte schreiben.
  2. Sorgen Sie dafür, dass die Website mit einer Geschwindigkeit läuft, die nicht durch Bots gebremst wird.
  3. Belästigen Sie die "normalen" Benutzer nicht mit Aufgaben, die sie erfüllen müssen, um zu beweisen, dass sie Menschen sind.

31voto

Zac Thompson Punkte 11833

Ich weiß nicht, ob das machbar ist: ... in die Offensive gehen.

Finden Sie heraus, nach welchen Daten die Bots suchen. Füttern Sie sie mit den Daten, nach denen sie suchen, wenn Sie den Mist NICHT verkaufen. Tun Sie dies auf eine Art und Weise, die die menschlichen Nutzer nicht stört oder verwirrt. Wenn die Bots Phase zwei auslösen, loggen sie sich ein und füllen das Formular aus, um $100 roombas anstelle von BOC zu kaufen. Natürlich setzt dies voraus, dass die Bots nicht besonders robust sind.

Eine andere Idee ist es, die Preise während des Verkaufszeitraums der Tüte Mist zufällig zu senken. Wer würde eine zufällige Tüte Mist für $150 kaufen, wenn Sie eindeutig sagen, dass sie nur $20 wert ist? Niemand außer übereifrigen Bots. Aber dann, 9 Minuten später, ist sie 35 Dollar wert ... dann, 17 Minuten später, ist sie 9 Dollar wert, oder was auch immer.

Sicher, die Zombie-Könige wären in der Lage zu reagieren. Es geht darum, dass ihre Fehler für sie sehr kostspielig werden (und dass sie dich für den Kampf gegen sie bezahlen müssen).

All dies setzt voraus, dass Sie einige Bot-Lords verärgern wollen, was vielleicht nicht zu 100% ratsam ist.

22voto

Ovid Punkte 11296

Das Problem scheint also wirklich zu sein: Die Bots wollen ihre "Tüte Mist", weil sie einen hohen wahrgenommenen Wert zu einem niedrigen wahrgenommenen Preis hat. Manchmal bietet man diesen Gegenstand an und die Bots lauern darauf, um zu sehen, ob er verfügbar ist und kaufen ihn dann.

Da es den Anschein hat, dass die Bot-Besitzer einen Gewinn machen (oder potenziell einen Gewinn machen), besteht der Trick darin, dies für sie unrentabel zu machen, indem ermutigend dass sie den Mist kaufen.

Erstens, siempre die "Tüte mit dem Mist" anbieten.

Zweitens: Stellen Sie sicher, dass der Mist auch wirklich Mist ist.

Drittens: Wechseln Sie den Mist häufig.

Einfach, nicht wahr?

Sie brauchen einen permanenten "Warum ist unser Mist manchmal Mist?"-Link neben dem Angebot, um den Menschen zu erklären, was los ist.

Wenn der Bot sieht, dass es Mist gibt und der Mist automatisch gekauft wird, wird sich der Empfänger furchtbar ärgern, dass er 10 Dollar für einen kaputten Zahnstocher bezahlt hat. Und dann eine leere Mülltüte. Und dann noch etwas Dreck von der Unterseite Ihres Schuhs.

Wenn sie in einem relativ kurzen Zeitraum genug von diesem Mist kaufen (und Sie haben überall große Haftungsausschlüsse, die erklären, warum Sie das tun), werden sie einen ordentlichen "Sack voll Geld" mit Ihrem "Sack voll Mist" verlieren. Selbst menschliches Eingreifen ihrerseits (um sicherzustellen, dass der Mist nicht Mist ist) kann fehlschlagen, wenn Sie den Mist oft genug austauschen. Vielleicht bemerken die Bots das und kaufen nichts, das zu kurz in der Rotation war, aber das bedeutet, dass die Menschen den Nicht-Mist kaufen.

Vielleicht sind Ihre Stammkunden sogar so amüsiert, dass Sie dies in einen großen Marketinggewinn verwandeln können. Fangen Sie an zu posten, wie viel von dem "Scheiß"-Karpfen verkauft wird. Die Leute werden wiederkommen, nur um zu sehen, wie sehr die Bots gebissen wurden.

Aktualisierung: Ich gehe davon aus, dass Sie im Vorfeld einige Anrufe erhalten werden, in denen sich die Leute beschweren. Ich glaube nicht, dass man das ganz verhindern kann. Wenn dies jedoch die Bots ausschaltet, können Sie es immer noch stoppen und später neu starten.

18voto

Chris Upchurch Punkte 14893
  1. Verkaufen Sie den Gegenstand an Menschen, die keine Skripte schreiben.

  2. Sorgen Sie dafür, dass die Website mit einer Geschwindigkeit läuft, die nicht durch Bots gebremst wird.

  3. Belästigen Sie die "normalen" Benutzer nicht mit Aufgaben, die sie erfüllen müssen, um zu beweisen, dass sie Menschen sind.

Sie wollen das wahrscheinlich nicht hören, aber #1 und #3 schließen sich gegenseitig aus.

On the Internet, nobody knows you're a dog

Es weiß auch niemand, dass du ein Bot bist. Es gibt keine programmatische Möglichkeit, festzustellen, ob am anderen Ende der Verbindung ein Mensch sitzt oder nicht, ohne dass die Person etwas tun muss. CAPTCHAs wurden erfunden, um Skripte/Bots daran zu hindern, im Internet etwas zu tun. Es ist ja nicht so, dass dies ein neues Problem wäre, für das nicht schon viel Mühe aufgewendet worden wäre. Wenn es einen besseren Weg gäbe, einen, der nicht so viel Ärger für echte Benutzer mit sich bringt wie ein CAPTCHA, würde ihn bereits jeder nutzen.

Ich denke, Sie müssen der Tatsache ins Auge sehen, dass ein gutes CAPTCHA die einzige Möglichkeit ist, Bots von Ihrer Bestellseite fernzuhalten, wenn Sie das wollen. Wenn die Nachfrage nach dem von Ihnen angebotenen Mist so groß ist, dass die Leute bereit sind, diesen Aufwand auf sich zu nehmen, um ihn zu bekommen, werden sich legitime Nutzer nicht durch ein CAPTCHA abschrecken lassen.

14voto

Adam Davis Punkte 89506

Die Methode, die Woot verwendet, um dieses Problem zu bekämpfen, verändert das Spiel - buchstäblich. Wenn sie einen außerordentlich begehrten Artikel zum Verkauf anbieten, lassen sie die Nutzer ein Videospiel spielen, um ihn zu bestellen.

Damit werden nicht nur Bots erfolgreich bekämpft (sie können leicht kleine Änderungen am Spiel vornehmen, um automatische Spieler zu vermeiden, oder sogar für jeden Verkauf ein neues Spiel anbieten), sondern es wird den Nutzern auch der Eindruck vermittelt, den gewünschten Artikel zu "gewinnen", während der Bestellvorgang verlangsamt wird.

Es ist immer noch sehr schnell ausverkauft, aber ich denke, dass die Lösung gut ist - die Neubewertung des Problems und die Änderung der Parameter führten zu einer erfolgreichen Strategie, für die es einfach keine rein technischen Lösungen gab.


Ihr gesamtes Geschäftsmodell basiert auf dem Prinzip "wer zuerst kommt, mahlt zuerst". Sie können nicht tun, was die Radiosender getan haben (sie machen nicht mehr den ersten Anrufer zum Gewinner, sondern den fünften, zwanzigsten oder dreizehnten) - das entspricht nicht Ihrem Hauptmerkmal.

Nein, es gibt keine Möglichkeit, dies zu tun, ohne das Bestellverhalten der tatsächlichen Nutzer zu verändern.

Nehmen wir an, Sie wenden all diese Taktiken an. Wenn ich beschließe, dass dies wichtig ist, werde ich einfach 100 Leute dazu bringen, mit mir zusammenzuarbeiten, wir werden eine Software entwickeln, die auf unseren 100 separaten Computern funktioniert, und Ihre Website 20 Mal pro Sekunde aufrufen (5 Sekunden zwischen den Zugriffen für jeden Benutzer/Cookie/jede IP-Adresse).

Sie haben zwei Stufen:

  1. Titelseite ansehen
  2. Bestellung

Sie können die Nummer 1 nicht mit einem Captcha blockieren - das würde echte Kunden verlieren ("Was? Ich muss jedes Mal ein Captcha lösen, wenn ich das neueste Angebot sehen will?!?").

Meine kleine Gruppe schaut also zu, zeitlich aufeinander abgestimmt, so dass wir etwa 20 Checks pro Sekunde bekommen, und wer die Änderung zuerst sieht, alarmiert alle anderen (automatisch), die dann die Startseite erneut laden, dem Bestell-Link folgen und die Transaktion durchführen (was auch automatisch passieren kann, es sei denn, Sie implementieren Captcha und ändern es für jedes wootoff/boc).

Sie können ein Captcha vor die Nummer 2 setzen, und auch wenn Sie das nur ungern tun, ist das vielleicht die einzige Möglichkeit, um sicherzustellen, dass echte Nutzer die Produkte bekommen, auch wenn Bots die Startseite sehen.

Aber selbst mit Captcha hätte meine kleine Gruppe von 100 Leuten immer noch einen erheblichen Vorsprung - und es gibt keine Möglichkeit zu erkennen, dass wir keine Menschen sind. Wenn Sie anfangen, unsere Zugriffe zu timen, würden wir nur etwas Jitter hinzufügen. Wir könnten nach dem Zufallsprinzip auswählen, welcher Computer aktualisiert werden soll, so dass sich die Reihenfolge der Zugriffe ständig ändert - aber es sieht immer noch genug nach einem Menschen aus.

Erstens: Beseitigen Sie die einfachen Bots

Sie brauchen eine adaptive Firewall, die Anfragen überwacht und, wenn jemand die offensichtliche Dummheit begeht, mehr als einmal pro Sekunde dieselbe IP-Adresse zu aktualisieren, Maßnahmen ergreift, um diese zu verlangsamen (Pakete fallen lassen, abgelehnte oder 500 Fehler zurücksenden usw.).

Dies dürfte zu einem erheblichen Rückgang des Datenverkehrs führen und die Taktiken der Bot-Nutzer verändern.

Zweitens: Machen Sie den Server rasend schnell.

Du willst das wirklich nicht hören... aber...

Ich denke, was Sie brauchen, ist eine vollständig maßgeschneiderte Lösung von Grund auf.

Sie müssen sich nicht mit dem TCP/IP-Stack herumschlagen, aber Sie müssen möglicherweise einen sehr, sehr, sehr schnellen benutzerdefinierten Server entwickeln, der speziell dafür ausgelegt ist, Benutzerverbindungen zu korrelieren und auf verschiedene Angriffe angemessen zu reagieren.

Apache, lighthttpd usw. sind alle großartig, weil sie flexibel sind, aber Sie betreiben eine Einzweck-Website, und Sie müssen wirklich in der Lage sein, mehr zu tun, als die aktuellen Server können (sowohl bei der Handhabung des Datenverkehrs als auch bei der angemessenen Bekämpfung von Bots).

Wenn Sie eine weitgehend statische Webseite (die etwa alle 30 Sekunden aktualisiert wird) auf einem benutzerdefinierten Server bereitstellen, sollten Sie nicht nur in der Lage sein, die 10-fache Anzahl von Anfragen und Datenverkehr zu bewältigen (da der Server nichts anderes tut, als die Anfrage zu erhalten und die Seite aus dem Speicher in den TCP/IP-Puffer zu lesen), sondern Sie erhalten auch Zugang zu Metriken, die Ihnen helfen könnten, Bots zu verlangsamen. Durch die Korrelation der IP-Adressen können Sie zum Beispiel einfach mehr als eine Verbindung pro Sekunde und IP blockieren. Menschen können nicht schneller sein als das, und selbst Personen, die dieselbe NAT-IP-Adresse verwenden, werden nur selten blockiert. Sie sollten eine langsame Sperrung vornehmen, d. h. die Verbindung eine ganze Sekunde lang in Ruhe lassen, bevor Sie die Sitzung offiziell beenden. Dies kann in eine Firewall eingespeist werden, um besonders schwerwiegenden Verstößen längerfristige Sperren zu erteilen.

Die Realität sieht jedoch so aus, dass, egal was man tut, es keine Möglichkeit gibt, einen Menschen von einem Bot zu unterscheiden, wenn der Bot von einem Menschen für einen einzigen Zweck erstellt wurde. Der Bot ist lediglich ein Stellvertreter für den Menschen.

Schlussfolgerung

Letztendlich kann man einen Menschen und einen Computer beim Betrachten der Titelseite nicht auseinanderhalten. Sie können Bots bei der Bestellung stoppen, aber die Bot-Nutzer haben immer noch einen Vorsprung, und Sie haben immer noch eine große Last zu bewältigen.

Sie können Blöcke für die einfachen Bots hinzufügen, was die Messlatte höher legt und weniger Leute dazu bringt, sich damit zu beschäftigen. Das könnte genug sein.

Aber wenn Sie Ihr Grundmodell nicht ändern, haben Sie Pech gehabt. Das Beste, was Sie tun können, ist, sich um die einfachen Fälle zu kümmern, den Server so schnell zu machen, dass normale Nutzer ihn nicht bemerken, und so viele Gegenstände zu verkaufen, dass selbst wenn Sie ein paar Millionen Bots haben, so viele normale Nutzer, die sie haben wollen, sie auch bekommen.

Sie könnten einen Honeypot einrichten und Benutzerkonten als Bot-Benutzer kennzeichnen, aber das wird in der Community ein großes negatives Echo hervorrufen.

Jedes Mal, wenn mir ein "Na ja, wie wäre es damit..." in den Sinn kommt. kann ich immer mit einer passenden Bot-Strategie kontern.

Selbst wenn Sie die Startseite mit einem Captcha versehen, um zur Bestellseite zu gelangen ("Die Bestellschaltfläche für diesen Artikel ist blau mit rosa Glitzer, irgendwo auf dieser Seite"), werden die Bots einfach alle Links auf der Seite öffnen und denjenigen verwenden, der zur Bestellseite zurückführt. So kann man einfach nicht gewinnen.

Machen Sie die Server schnell, setzen Sie ein reCaptcha (das einzige, das ich gefunden habe, das nicht leicht zu überlisten ist, aber es ist wahrscheinlich viel zu langsam für Ihre Anwendung) auf der Bestellseite ein, und denken Sie darüber nach, wie Sie das Modell leicht ändern können, damit normale Nutzer genauso gute Chancen haben wie die Bot-Nutzer.

-Adam

12voto

Robert Venables Punkte 5903

Ich würde sagen, die Preisinformationen sollten über eine API zugänglich gemacht werden. Das ist eine unintuitive Lösung, aber sie gibt Ihnen die Kontrolle über die Situation. Fügen Sie der API einige Einschränkungen hinzu, damit sie etwas weniger funktional ist als die Website.

Das Gleiche könnte man auch für die Bestellung tun. Sie könnten mit kleinen Änderungen an der API-Funktionalität/Leistung experimentieren, bis Sie den gewünschten Effekt erzielen.

Es gibt Proxys und Botnets, um IP-Kontrollen zu umgehen. Es gibt Captcha-Leseskripte, die extrem gut sind. Es gibt sogar Teams von Arbeitern in Indien, die Captchas für einen geringen Preis umgehen. Jede Lösung, die Sie sich einfallen lassen, kann vernünftig umgangen werden. Sogar die Lösungen von Ned Batchelder können umgangen werden, indem man eine WebBrowser-Kontrolle oder einen anderen simulierten Browser in Verbindung mit einem Botnet oder einer Proxy-Liste verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X