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.

4voto

Shachar Punkte 943

Mein Ansatz wäre, sich auf nichttechnologische Lösungen zu konzentrieren (sonst begibt man sich in ein Wettrüsten, das man verlieren oder zumindest viel Zeit und Geld kosten wird). Ich würde mich auf die Bereiche Rechnungsstellung/Versand konzentrieren - Sie können Bots finden, indem Sie entweder mehrere Lieferungen an dieselbe Adresse oder mehrere Abbuchungen von einer einzigen Zahlungsmethode finden. Sie können dies sogar über mehrere Wochen hinweg tun, so dass ein Nutzer, der einen früheren Artikel erhalten hat (indem er wirklich schnell reagiert hat), dieses Mal möglicherweise eine Art "Handicap" erhält.

Dies hätte auch den Nebeneffekt (der meiner Meinung nach vorteilhaft ist, aber ich könnte mich in Ihrem Fall marketingtechnisch irren), dass sich der Kreis derer, die Glück haben und woot kaufen können, vielleicht vergrößert.

4voto

Brian Punkte 24901

Setzen Sie eine 5-minütige Verzögerung für alle Produktankündigungen für nicht registrierte Benutzer ein. Gelegenheitsnutzer werden dies nicht wirklich bemerken und Nicht-Gelegenheitsnutzer werden ohnehin registriert sein.

4voto

Dave Sherohman Punkte 44017

Ich sehe nicht, dass die Überprüfung der eingehenden IPs eine so große Belastung darstellt, wie Sie behaupten. Im Gegenteil, ich habe für einen meiner Kunden ein Projekt durchgeführt, bei dem die HTTP-Zugriffsprotokolle alle fünf Minuten analysiert werden (es hätte auch in Echtzeit erfolgen können, aber das wollte er aus einem Grund, den ich nie ganz verstanden habe, nicht) und Firewall-Regeln erstellt werden, um Verbindungen von IP-Adressen zu blockieren, die eine übermäßige Anzahl von Anfragen generieren, es sei denn, die Adresse kann als zu einer legitimen Suchmaschine (Google, Yahoo usw.) gehörig bestätigt werden.

Dieser Kunde betreibt einen Web-Hosting-Dienst und führt diese Anwendung auf drei Servern aus, die insgesamt 800-900 Domänen verwalten. Die Spitzenaktivität liegt im Bereich von Tausenden von Hits pro Sekunde, und es gab noch nie ein Leistungsproblem - Firewalls sind sehr effizient beim Abweisen von Paketen von Adressen auf der schwarzen Liste.

Und ja, es gibt durchaus DDOS-Technologien, die diesen Plan vereiteln würden, aber er sieht nicht, dass dies in der realen Welt geschieht. Im Gegenteil, er sagt, dass die Last auf seinen Servern dadurch erheblich reduziert wurde.

3voto

Oli Punkte 226885

Zeitsperre für Benutzeragenten, die so viele Anfragen pro Minute stellen. Wenn z.B. jemand 10 Minuten lang genau alle 5 Sekunden eine Seite anfordert, ist er wahrscheinlich kein Benutzer... Aber es könnte schwierig sein, das richtig hinzubekommen.

Wenn sie einen Alarm auslösen, leiten Sie jede Anfrage auf eine statische Seite mit so wenig DB-IO wie möglich um, mit einer Nachricht, die sie wissen lässt, dass sie in X Minuten wieder freigeschaltet werden.

Es ist wichtig, hinzuzufügen, dass Sie dies wahrscheinlich nur auf Anfragen für Seiten anwenden und alle Anfragen für Medien (js, Bilder, etc.) ignorieren sollten.

3voto

Shawn Miller Punkte 7007

Das Verhindern von DoS würde #2 von @davebugs Zielen, die er oben skizziert hat, vereiteln: "Die Seite auf einer Geschwindigkeit halten, die nicht durch Bots verlangsamt wird", aber es würde nicht unbedingt #1 lösen: "Den Artikel an Menschen verkaufen, die keine Skripte schreiben".

Ich bin mir sicher, dass ein Skripter etwas schreiben könnte, das knapp unter der Überschreitungsgrenze liegt und trotzdem schneller wäre, als ein Mensch die Bestellformulare durchgehen könnte.

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