Verhindern, dass Skripter Ihre Website zuschlagen


489

Ich habe eine Antwort akzeptiert, aber leider glaube ich, dass wir an unserem ursprünglichen Worst-Case-Szenario festhalten : CAPTCHA alle bei Kaufversuchen des Mistes . Kurze Erklärung: Caching / Webfarmen machen es unmöglich, Treffer zu verfolgen, und jede Problemumgehung (Senden eines nicht zwischengespeicherten Web-Beacons, Schreiben an eine einheitliche Tabelle usw.) verlangsamt die Site schlechter als die Bots. Es gibt wahrscheinlich teure Hardware von Cisco oder dergleichen, die auf hohem Niveau helfen kann, aber es ist schwierig, die Kosten zu rechtfertigen, wenn CAPTCHA-ing für alle eine Alternative darstellt. Ich werde später eine ausführlichere Erklärung versuchen und diese für zukünftige Suchende bereinigen (obwohl andere es gerne versuchen können, da es sich um ein Community-Wiki handelt).

Situation

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

Benutzerfreundlichkeit ist ein wichtiger Teil meiner Arbeit, und die Website aufregend und unterhaltsam zu gestalten, ist der größte Teil des Restes. Hier ergeben sich die drei folgenden Ziele. CAPTCHA schadet der Benutzerfreundlichkeit und Bots stehlen den Spaß und die Aufregung aus unseren Mistverkäufen.

Bots schlagen unsere Titelseite zehnmal pro Sekunde auf den Bildschirm, um den Random Crap-Verkauf abzukratzen (und / oder unser RSS zu scannen). In dem Moment, in dem sie das sehen, löst es eine zweite Phase des Programms aus, die sich anmeldet, auf Ich möchte Eins klickt, das Formular ausfüllt und den Mist kauft.

Auswertung

lc : Auf Stackoverflow und anderen Sites, die diese Methode verwenden, handelt es sich fast immer um authentifizierte (angemeldete) Benutzer, da dies für die versuchte Aufgabe erforderlich ist.

Auf Woot können anonyme (nicht protokollierte) Benutzer unsere Homepage anzeigen. Mit anderen Worten, die Slamming-Bots können nicht authentifiziert sein (und im Wesentlichen nicht nachverfolgbar sein, außer nach IP-Adresse).

Wir suchen also wieder nach IPs, die a) in Zeiten von Cloud-Netzwerken und Spambot-Zombies ziemlich nutzlos sind und b) angesichts der Anzahl der Unternehmen, die von einer IP-Adresse stammen, zu viele Unschuldige fangen (ganz zu schweigen von den Problemen mit Nicht statische IP-ISPs und potenzielle Leistungseinbußen beim Versuch, dies zu verfolgen.

Oh, und Leute uns anrufen zu lassen, wäre das schlimmste Szenario. Können wir Sie anrufen lassen?

BradC : Die Methoden von Ned Batchelder sehen ziemlich cool aus, aber sie sind ziemlich fest darauf ausgelegt, Bots zu besiegen, die für ein Netzwerk von Websites erstellt wurden. Unser Problem ist, dass Bots speziell dafür gebaut wurden, unsere Site zu besiegen. Einige dieser Methoden könnten wahrscheinlich für kurze Zeit funktionieren, bis die Scripter ihre Bots weiterentwickelt haben, um den Honeypot zu ignorieren, nach nahegelegenen Labelnamen anstelle von Formular-IDs zu suchen und ein Javascript-fähiges Browser-Steuerelement zu verwenden.

 

lc nochmal : "Es sei denn natürlich, der Hype ist Teil Ihres Marketingplans." Ja, das ist es definitiv. Die Überraschung, wann der Gegenstand erscheint, sowie die Aufregung, wenn Sie es schaffen, einen zu bekommen, sind wahrscheinlich genauso wichtig oder wichtiger als der Mist, den Sie tatsächlich bekommen. Alles, was First-Come / First-Serve eliminiert, wirkt sich nachteilig auf den Nervenkitzel aus, den Mist zu „gewinnen“.

 

novatrust : Und ich begrüße unsere neuen Bot-Overlords. Wir bieten tatsächlich RSS-Feeds an, damit Apps von Drittanbietern unsere Website nach Produktinformationen durchsuchen können, jedoch nicht vor dem HTML-Code der Hauptwebsite. Wenn ich es richtig interpretiere, hilft Ihre Lösung Ziel 2 (Leistungsprobleme), indem sie Ziel 1 vollständig opfert und einfach die Tatsache aufgibt, dass Bots den größten Teil des Mistes kaufen. Ich habe Ihre Antwort positiv bewertet, weil sich Ihr Pessimismus im letzten Absatz für mich zutreffend anfühlt. Hier scheint es keine Silberkugel zu geben.

Der Rest der Antworten basiert im Allgemeinen auf IP-Tracking, das wiederum sowohl nutzlos (mit Botnetzen / Zombies / Cloud-Netzwerken) als auch schädlich (das Fangen vieler Unschuldiger, die von denselben IP-Zielen kommen) zu sein scheint.

Irgendwelche anderen Ansätze / Ideen? Meine Entwickler sagen immer wieder "Lass uns einfach CAPTCHA machen", aber ich hoffe, dass es weniger aufdringliche Methoden für alle tatsächlichen Menschen gibt, die etwas von unserem Mist wollen.

Ursprüngliche Frage

Angenommen, Sie verkaufen etwas Billiges, das einen sehr hohen wahrgenommenen Wert hat, und Sie haben 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.

Am Ende haben Sie Skripter und Bots, die versuchen, programmatisch [a] herauszufinden, wann Sie diesen Artikel verkaufen, und [b] sicherstellen, dass sie zu den Ersten gehören, die ihn kaufen. Das ist aus zwei Gründen scheiße:

  1. Ihre Website wird von Nicht-Menschen zugeschlagen, was alles für alle verlangsamt.
  2. Die Scripter "gewinnen" das Produkt, was dazu führt, dass sich die Stammgäste betrogen fühlen.

Eine scheinbar offensichtliche Lösung besteht darin, einige Rahmen zu erstellen, durch die Ihre Benutzer springen können, bevor sie ihre Bestellung aufgeben. Dabei gibt es jedoch mindestens drei Probleme:

  • Die Benutzererfahrung ist für Menschen zum Kotzen, da sie CAPTCHA entschlüsseln, die Katze auswählen oder ein mathematisches Problem lösen müssen.
  • Wenn der wahrgenommene Nutzen hoch genug und die Menge groß genug ist, findet eine Gruppe ihren Weg um jede Optimierung herum, was zu einem Wettrüsten führt. (Dies gilt insbesondere, je einfacher die Optimierung ist. Versteckte 'Kommentare'-Formulare, Neuanordnen der Formularelemente, falsche Beschriftung, versteckte' Gotcha'-Texte funktionieren alle einmal und müssen dann geändert werden, um die Ausrichtung auf dieses spezielle Formular zu bekämpfen .)
  • Selbst wenn die Scripter Ihre Optimierung nicht "lösen" können, verhindert dies nicht, dass sie Ihre Startseite zuschlagen und dann einen Alarm auslösen, damit der Scripter die Bestellung manuell ausfüllt. Da sie den Vorteil haben, [a] zu lösen, werden sie wahrscheinlich immer noch gewinnen [b], da sie die ersten Menschen sein werden, die die Bestellseite erreichen. Darüber hinaus tritt 1. immer noch auf, was zu Serverfehlern und einer verminderten Leistung für alle führt.

Eine andere Lösung besteht darin, auf zu häufig auftretende IPs zu achten, sie von der Firewall zu blockieren oder auf andere Weise zu verhindern, dass sie bestellt werden. Dies könnte 2. lösen und [b] verhindern, aber der Leistungsverlust beim Scannen nach IPs ist massiv und würde wahrscheinlich mehr Probleme wie 1. verursachen, als die Scripter alleine verursacht haben. Darüber hinaus macht die Möglichkeit von Cloud-Netzwerken und Spambot-Zombies die IP-Überprüfung ziemlich nutzlos.

Eine dritte Idee, die das Laden des Bestellformulars für einige Zeit (z. B. eine halbe Sekunde) erzwingt, würde möglicherweise den Fortschritt der schnellen Bestellungen verlangsamen, aber auch hier wären die Skripter immer noch die ersten Personen, bei jeder Geschwindigkeit, die nicht nachteilig ist tatsächliche Benutzer.

Tore

  1. Verkaufe den Gegenstand an Menschen, die keine Skripte schreiben.
  2. Halten Sie die Site mit einer Geschwindigkeit laufen, die nicht von Bots verlangsamt wird.
  3. Belästigen Sie die "normalen" Benutzer nicht mit Aufgaben, um zu beweisen, dass sie Menschen sind.

1
Ich denke, Sie haben widersprüchliche Ziele: Halten Sie die Erfahrung genau so, wie sie ist, aber entfernen Sie die Bots. Ich denke, man kann den einen nicht bekommen, ohne einen Teil des anderen zu opfern.
Max

Es ist ein Community-Wiki, also zögern Sie nicht, einen Stich zu machen, aber ich habe größtenteils versucht, jeden Punkt so klar wie möglich zu behandeln, da es offensichtliche Dinge zu versuchen gibt, die wir bereits versucht und abgezinst haben.
Dave Rutledge

Warum nicht einfach wiederholte Täter zwischenspeichern, einfach nicht die Seite aktualisieren, die sie wiederholt anfordern? IPv4- und MAC-Adressen sind insgesamt 32 + 48 Bit. Das sind 10 MB für 1 Million Benutzer, sollte kein Problem sein. Die Kombination IPv4 und MAC soll Ihnen helfen, alle Arten von Benutzern genauer zu
verfolgen

4
Ich verstehe nicht wirklich, warum Sie anonyme Benutzer den Mistverkauf sehen lassen müssen. Warum nicht nur angemeldeten Benutzern anbieten? Wenn Sie dies tun, würden unbekannte Benutzer nicht zu oft auf die Seite gelangen und könnten dann schlechte Benutzer verbieten.
Ryan Guill

1
Ich denke, einigen Leuten fehlt hier ein Schlüsselfaktor: Diese Bots sind so eingerichtet, dass sie sich anmelden und auch kaufen. Sie kennen ein gültiges Konto und können angemeldet sein. Außerdem sitzen echte Personen, die Woot verwenden, dort, sobald ein Gegenstand auftaucht, und drücken F5, um alle 2-5 Sekunden neu zu laden. Das ist gültiger normaler menschlicher Gebrauch.
CodingWithSpike

Antworten:


229

Wie wäre es mit der Implementierung von SO mit den CAPTCHAs?

Wenn Sie die Site normal verwenden, werden Sie wahrscheinlich nie eine sehen. Wenn Sie dieselbe Seite zu oft neu laden, aufeinanderfolgende Kommentare zu schnell veröffentlichen oder etwas anderes, das einen Alarm auslöst, beweisen Sie, dass sie Menschen sind. In Ihrem Fall wäre dies wahrscheinlich ein ständiges Nachladen derselben Seite, wenn Sie jedem Link auf einer Seite schnell folgen oder ein Bestellformular ausfüllen, das zu schnell ist, um menschlich zu sein.

Wenn sie die Prüfung x-mal hintereinander nicht bestehen (z. B. 2 oder 3), geben Sie dieser IP eine Zeitüberschreitung oder eine andere solche Maßnahme. Dann, am Ende des Timeouts, legen Sie sie wieder auf den Scheck zurück.


Da Sie nicht registrierte Benutzer haben, die auf die Site zugreifen, haben Sie nur IPs, um fortzufahren. Sie können Sitzungen für jeden Browser ausgeben und auf diese Weise verfolgen, wenn Sie dies wünschen. Und natürlich einen Human-Check durchführen, wenn zu viele Sitzungen nacheinander (neu) erstellt werden (falls ein Bot das Cookie weiterhin löscht).

Wenn Sie zu viele Unschuldige fangen möchten, können Sie auf der Human-Check-Seite einen Haftungsausschluss einfügen: "Diese Seite wird möglicherweise auch angezeigt, wenn zu viele anonyme Benutzer unsere Website vom selben Ort aus anzeigen. Wir empfehlen Ihnen, sich zu registrieren oder anzumelden, um dies zu vermeiden." diese." (Passen Sie den Wortlaut entsprechend an.)

Wie hoch ist außerdem die Wahrscheinlichkeit, dass X Personen dieselbe Seite (n) gleichzeitig von einer IP laden? Wenn sie hoch sind, benötigen Sie möglicherweise einen anderen Auslösemechanismus für Ihren Bot-Alarm.


Bearbeiten: Eine andere Option ist, wenn sie zu oft fehlschlagen und Sie von der Nachfrage des Produkts überzeugt sind, sie zu blockieren und sie persönlich auffordern zu lassen, die Blockierung zu entfernen.

Leute anrufen zu lassen scheint eine blöde Maßnahme zu sein, aber es stellt sicher, dass sich irgendwo hinter dem Computer ein Mensch befindet . Der Schlüssel ist, dass der Block nur für eine Bedingung vorhanden ist, die fast nie eintreten sollte, es sei denn, es handelt sich um einen Bot (z. B. die Prüfung mehrmals hintereinander nicht bestehen). Dann erzwingt es die menschliche Interaktion - um den Hörer abzunehmen.

Als Antwort auf den Kommentar, dass sie mich anrufen, gibt es hier offensichtlich diesen Kompromiss. Sind Sie besorgt genug, um sicherzustellen, dass Ihre Benutzer menschlich sind, um ein paar Anrufe anzunehmen, wenn sie in den Verkauf gehen? Wenn ich so besorgt wäre, dass ein Produkt an menschliche Benutzer gelangt, müsste ich diese Entscheidung treffen und dabei möglicherweise einen (kleinen) Teil meiner Zeit opfern.

Da es so aussieht, als ob Sie entschlossen sind, Bots nicht die Oberhand zu gewinnen / Ihre Website zu knallen, glaube ich, dass das Telefon eine gute Option sein kann. Da ich mit Ihrem Produkt keinen Gewinn mache, habe ich kein Interesse daran, diese Anrufe zu erhalten. Würden Sie einen Teil dieses Gewinns teilen, könnte mich das interessieren. Da dies Ihr Produkt ist, müssen Sie entscheiden, wie sehr Sie sich interessieren, und entsprechend implementieren.


Die anderen Möglichkeiten, den Block freizugeben, sind einfach nicht so effektiv: eine Zeitüberschreitung (aber sie könnten Ihre Website nach dem erneuten Spülen erneut zuschlagen), eine lange Zeitüberschreitung (wenn es wirklich ein Mensch wäre, der versucht, Ihr Produkt zu kaufen, Sie würden SOL sein und dafür bestraft, dass sie den Scheck nicht bestanden haben), E-Mail (leicht von Bots erledigt), Fax (gleich) oder Schneckenpost (dauert zu lange).

Natürlich können Sie stattdessen die Zeitüberschreitung pro IP für jedes Mal erhöhen, wenn sie eine Zeitüberschreitung erhalten. Stellen Sie nur sicher, dass Sie wahre Menschen nicht versehentlich bestrafen.


13
Google verwendet denselben Ansatz und verfügt nur über IP-Adressen. Bei der Arbeit bekomme ich häufig ein CAPTCHA, bevor ich bei Google suchen kann, da sie bot-ähnliches Verhalten von derselben IP-Adresse aus sehen. Ich denke, dieser Ansatz (CAPTCHA nach botartigem Verhalten) ist der beste, den Sie bekommen werden.
Ross

7
Google hat mich schon einmal nach einem CAPTCHA gefragt, aber es war meine eigene Schuld - ich habe sie als Taschenrechner verwendet und Dutzende nahezu identischer Summen gemacht.
Marcus Downing

Die CAPTCHA-Option klingt für mich wie ein Gewinner. Sie verletzen die Bots schwer und wenn Sie gut ausbalanciert sind, sollten Sie Ihren legitimen Benutzern niemals in die Quere kommen.
Xan

Anstatt Personen auszusperren und einen Anruf zu tätigen, können Sie eine temporäre E-Mail-Adresse wie cur92Siva@site.com generieren, aber den vorderen Teil mit einem Bild generieren.
Sam

Das könnte auch funktionieren, es sei denn, die Bots gewöhnen sich nur an das System und können die E-Mail-Adresse auf dem Bildschirm abkratzen. Mein Punkt beim Telefonat ist, dass es tatsächlich die menschliche Interaktion erzwingt und der Benutzer sich direkt mit seiner Stimme erklären muss. Bot-Besitzer wollen das wahrscheinlich nicht.
lc.

193

Sie müssen einen Weg finden, wie die Bots Dinge kaufen können, die massiv überteuert sind: 12-mm-Flügelnuss: 20 US-Dollar. Sehen Sie, wie viele Bots auftauchen, bevor die Drehbuchautoren entscheiden, dass Sie sie spielen.

Verwenden Sie die Gewinne, um mehr Server zu kaufen und die Bandbreite zu bezahlen.


12
Was ist, wenn sie die Artikel zurücksenden oder eine Rückbuchung ausstellen? Dies kann Sie kosten und Rückbuchungen können Ihr Geschäft mit Kreditkartenverarbeitern beeinträchtigen. Die Bots verwenden wahrscheinlich auch gestohlene Karten, aber dies kann die Höhe der Rückbuchungen verschärfen, da höhere Beträge häufiger in Frage gestellt werden.
Tai Squared

13
Laden Sie sie nicht auf, sondern markieren Sie sie als Bots, insbesondere für den Versuch, den Artikel zu kaufen. Wenn jemand einen falschen Gegenstand kauft, markieren Sie ihn einfach als Bot und verbieten Sie ihn. Sie könnten sie wahrscheinlich nur für ein paar Stunden aussperren.
Kibbee

4
Dies hat einen ernsthaften Comedy-Wert, bis Sie einen Script-Kiddie verärgern, der mehr Fähigkeiten besitzt als nur Woot zu kratzen, und Ihnen echte Probleme bereitet, weil Sie ihn abgezockt haben.
MattBelanger

2
Wenn das Drehbuchkind wütend wird, setzen sie sich möglicherweise so weit aus, dass Sie sie markieren und den Strafverfolgungsbehörden übergeben können.
Jacco

9
sqook: Dies ist keine Technologielösung, sondern eine reale Lösung. Es ist dasselbe, Sicherheitspersonal mit Waffen in Banken zu stecken. Es mag hartgesotten erscheinen, aber die Gauner auch, also sei hartnasig. Verletze sie dort, wo es weh tut, bis sie aufhören.
Christopher Mahan

162

Meine Lösung wäre, Screen-Scraping wertlos zu machen, indem ich für Bots und Skripte eine Verzögerung von ungefähr 10 Minuten einlege.

So würde ich es machen:

  • Protokollieren und identifizieren Sie alle Wiederholer.

Sie müssen nicht jede IP-Adresse bei jedem Treffer protokollieren. Verfolgen Sie nur einen von etwa 20 Treffern. Ein Wiederholungstäter wird weiterhin in einer zufälligen gelegentlichen Verfolgung angezeigt.

  • Bewahren Sie einen Cache Ihrer Seite etwa 10 Minuten früher auf.

  • Wenn ein Repeat-Hitter / Bot auf Ihre Website trifft, geben Sie ihm die 10 Minuten alte zwischengespeicherte Seite.

Sie werden nicht sofort wissen, dass sie eine alte Site bekommen. Sie werden es und alles kratzen können, aber sie werden keine Rennen mehr gewinnen, weil "echte Leute" einen Vorsprung von 10 Minuten haben werden.

Leistungen:

  • Kein Ärger oder Probleme für Benutzer (wie CAPTCHAs).
  • Vollständig serverseitig implementiert. (kein Vertrauen in Javascript / Flash)
  • Das Bereitstellen einer älteren, zwischengespeicherten Seite sollte weniger leistungsintensiv sein als eine Live-Seite. Auf diese Weise können Sie die Belastung Ihrer Server verringern!

Nachteile

  • Erfordert die Verfolgung einiger IP-Adressen
  • Erfordert das Verwalten und Verwalten eines Caches älterer Seiten.

Was denken Sie?


1
Verdammt. Ich habe gerade anderthalb Stunden damit verbracht, mein eigenes Fünf-Vektor-Schema für Woot zu schreiben, und nachdem ich lange und gründlich über meine fünfte Gegenmaßnahme (eine Botnet-Drossel) nachgedacht hatte, musste ich mich geschlagen geben. Es funktioniert nicht. Und der Rest meiner einstündigen Lösung ist - nun, diese. abelenky, ich tippe meinen Hut auf dich
Jens Roland

7
Um darauf aufzubauen: Legen Sie die IPs in einen speicherinternen LRU-Zähl-Hash (erhöhen und jedes Mal, wenn eine IP zurückkommt, nach oben drücken). Fügen Sie Heuristiken hinzu, die auf umgekehrten IP-Informationen, Aktivitäten, Bild- / JS- / Cookie-Downloads basieren. Skalieren Sie Ihre Reaktion danach, wie schlimm der Angriff ist, und minimieren Sie die Folgen falscher Negative.
SquareCog

1
(Fortsetzung :) Und meine Technik schließt / verbietet niemanden. Es gibt ihnen nur verzögerte Informationen. Niemand im Büro kann einen Preis gewinnen, aber aus Sicht des Kundendienstes / der Barrierefreiheit ist dies kein großes Problem.
Abelenky

18
@bruceatk: Wenn Sie ihnen eine spezielle Seite nur für Bots geben, lernen sie schließlich, diese zu erkennen und einen regulären Kunden genauer zu fälschen. Wenn sie eine alte Seite angeben, haben sie KEINE Ahnung, dass sie alte Daten erhalten. Die alten Daten sind legitim! Es ist einfach nutzlos für Wettkampf- / Rennzwecke.
Abelenky

1
Ein großes Dankeschön an diejenigen, die meine Idee positiv bewertet haben. Obwohl die Prämie vorbei ist, hat diese Idee meiner Meinung nach viele Vorteile, da sie einfacher umzusetzen ist als ein Captcha, weniger wahrscheinlich Menschen belästigt und eher Bots vereitelt. Ich hoffe, jemand probiert dies auf einer Website aus.
Abelenky

54

Schauen Sie sich diesen Artikel von ned Batchelder hier an . In seinem Artikel geht es darum, Spambots zu stoppen, aber die gleichen Techniken könnten leicht auf Ihre Website angewendet werden.

Anstatt Bots zu stoppen, indem sich Personen identifizieren, können wir die Bots stoppen, indem wir es ihnen erschweren, einen erfolgreichen Beitrag zu verfassen, oder indem sie sich versehentlich als Bots identifizieren. Dies entlastet die Menschen und lässt das Kommentarformular frei von sichtbaren Anti-Spam-Maßnahmen.

Mit dieser Technik verhindere ich Spambots auf dieser Site. Es klappt. Die hier beschriebene Methode betrachtet den Inhalt überhaupt nicht.

Einige andere Ideen:

  • Erstellen Sie einen offiziellen Mechanismus zur automatischen Benachrichtigung (RSS-Feed? Twitter?), Den Benutzer abonnieren können, wenn Ihr Produkt in den Verkauf geht. Dies reduziert die Notwendigkeit , dass Benutzer Skripte erstellen müssen.
  • Ändern Sie Ihre Verschleierungstechnik unmittelbar vor dem Verkauf eines neuen Artikels. Selbst wenn die Scripter das Wettrüsten eskalieren können, sind sie immer einen Tag zurück.

BEARBEITEN: Um ganz klar zu sein, beschreibt der obige Artikel von Ned Methoden, um den automatisierten Kauf von Artikeln zu verhindern, indem verhindert wird, dass ein BOT die Formulare durchläuft, um eine Bestellung einzureichen. Seine Techniken wären nicht nützlich, um zu verhindern, dass Bots die Startseite auf dem Bildschirm abkratzen, um festzustellen, wann ein Bandoleer of Carrots zum Verkauf steht. Ich bin mir nicht sicher, ob das wirklich möglich ist.

In Bezug auf Ihre Kommentare zur Wirksamkeit von Neds Strategien: Ja, er diskutiert Honeypots, aber ich denke nicht, dass dies seine stärkste Strategie ist. Seine Diskussion über den SPINNER ist der ursprüngliche Grund, warum ich seinen Artikel erwähnt habe. Entschuldigung, ich habe das in meinem ursprünglichen Beitrag nicht klarer gemacht:

Der Spinner ist ein verstecktes Feld, das für einige Dinge verwendet wird: Er fasst eine Reihe von Werten zusammen, die Manipulationen und Wiederholungen verhindern, und wird verwendet, um Feldnamen zu verschleiern. Der Spinner ist ein MD5-Hash von:

  • Der Zeitstempel,
  • Die IP-Adresse des Kunden,
  • Die Eintrags-ID des Blogeintrags, der kommentiert wird, und
  • Ein Geheimnis.

So können Sie das bei WOOT.com umsetzen:

Ändern Sie den "geheimen" Wert, der als Teil des Hashs verwendet wird, jedes Mal, wenn ein neuer Artikel zum Verkauf angeboten wird. Dies bedeutet, dass wenn jemand einen BOT für den automatischen Kauf von Artikeln entwirft, dies nur funktioniert, bis der nächste Artikel zum Verkauf angeboten wird !!

Selbst wenn jemand in der Lage ist, seinen Bot schnell neu zu erstellen, haben alle anderen tatsächlichen Benutzer bereits ein BOC gekauft, und Ihr Problem ist gelöst!

Die andere Strategie, die er bespricht, besteht darin , die Honeypot-Technik von Zeit zu Zeit zu ändern (ändern Sie sie erneut, wenn ein neuer Artikel in den Verkauf geht):

  • Verwenden Sie CSS-Klassen (natürlich zufällig), um die anzuzeigenden Felder oder ein enthaltendes Element festzulegen: keine.
  • Färben Sie die Felder genauso (oder sehr ähnlich) wie den Hintergrund der Seite.
  • Verwenden Sie die Positionierung, um ein Feld aus dem sichtbaren Bereich der Seite zu verschieben.
  • Machen Sie ein Element zu klein, um das enthaltene Honeypot-Feld anzuzeigen.
  • Lassen Sie die Felder sichtbar, aber verwenden Sie die Positionierung, um sie mit einem undurchsichtigen Element abzudecken.
  • Verwenden Sie Javascript, um eine dieser Änderungen vorzunehmen. Ein Bot muss über eine vollständige Javascript-Engine verfügen.
  • Lassen Sie die Honigtöpfe wie in den anderen Feldern angezeigt, aber weisen Sie die Benutzer an, nichts einzugeben.

Ich denke, meine allgemeine Idee ist es, das Formulardesign zu ändern, wenn jeder neue Artikel in den Verkauf kommt. Oder ändern Sie es mindestens, wenn ein neues BOC zum Verkauf angeboten wird.

Welches ist was, ein paar Mal / Monat?

Wenn Sie diese Antwort akzeptieren, geben Sie mir ein Heads-up, wann die nächste fällig ist? :) :)


+1 für den RSS. Stellen Sie sicher, dass legitime Benutzer belohnt werden.
Marcus Downing

RSS scheint eine gute Lösung zu sein, aber könnte dies die Werbeeinnahmen beeinträchtigen, von denen ich vermute, dass diese Website abhängt?
TM.

1
Ich verstehe das "Spinner" -Konzept nicht ganz. Ist dies nur ein zusätzliches Datenelement, das in einem HTML-Code abgelegt <form>und bei der Übermittlung gesendet wird? Weil ein Bot das auch leicht kratzen kann.
Ponkadoodle

44

F: Wie können Sie verhindern, dass Skripter Ihre Website hunderte Male pro Sekunde zuschlagen?
A: Das tust du nicht. Es gibt keine Möglichkeit, dieses Verhalten durch externe Agenten zu verhindern .

Sie könnten eine Vielzahl von Technologien einsetzen, um eingehende Anfragen zu analysieren und heuristisch zu versuchen, festzustellen, wer ein Mensch ist und wer nicht ... aber es würde fehlschlagen. Schließlich, wenn nicht sofort.

Die einzig praktikable langfristige Lösung besteht darin , das Spiel so zu ändern , dass die Website nicht botfreundlich oder für Scripter weniger attraktiv ist.

Wie machst du das? Nun, das ist eine andere Frage! ;-);

...

OK, einige Optionen wurden oben angegeben (und abgelehnt). Ich bin mit Ihrer Website nicht vertraut, da ich sie nur einmal angesehen habe. Da die Benutzer jedoch Text in Bildern lesen können und Bots dies nicht einfach tun können, ändern Sie die Ankündigung in ein Bild. Kein CAPTCHA , nur ein Bild -

  • Generieren Sie das Bild (natürlich zwischengespeichert), wenn die Seite angefordert wird
  • Behalten Sie den Namen der Bildquelle bei, damit das Spiel nicht verloren geht
  • Meistens enthält das Bild normalen Text und wird so ausgerichtet, dass es Teil der Inline-HTML-Seite ist
  • Wenn das Spiel eingeschaltet ist, ändert sich das Bild in den Ankündigungstext
  • Der Ankündigungstext enthält eine URL und / oder einen Code , die manuell eingegeben werden müssen , um den Preis zu erhalten. CAPTCHA den Code, wenn Sie möchten, aber das ist wahrscheinlich nicht notwendig.
  • Für zusätzliche Sicherheit kann der Code ein einmaliges Token sein, das speziell für die Anforderung / IP / den Agenten generiert wurde, sodass wiederholte Anforderungen unterschiedliche Codes generieren. Oder Sie können eine Reihe von Zufallscodes (ein einmaliges Pad) vorab generieren, wenn die On-Demand-Generierung zu anstrengend ist.

Führen Sie Zeitfahren mit realen Personen durch, die darauf reagieren, und ignorieren Sie die Antworten ("Hoppla, ein Fehler ist aufgetreten, sorry! Bitte versuchen Sie es erneut") schneller als (sagen wir) die Hälfte dieser Zeit. Dieses Ereignis sollte auch eine Warnung an die Entwickler auslösen, dass mindestens ein Bot den Code / das Spiel herausgefunden hat. Es ist also Zeit, den Code / das Spiel zu ändern.

Ändern Sie das Spiel trotzdem regelmäßig, auch wenn keine Bots es auslösen, nur um die Zeit der Scripter zu verschwenden. Irgendwann sollten die Scripter des Spiels müde werden und woanders hingehen ... wir hoffen ;-)

Ein letzter Vorschlag: Wenn eine Anfrage für Ihre Hauptseite eingeht, stellen Sie sie in eine Warteschlange und beantworten Sie die Anfragen in der Reihenfolge in einem separaten Prozess (möglicherweise müssen Sie den Webserver hacken / erweitern, um dies zu tun, aber dies wird wahrscheinlich der Fall sein lohnend). Wenn eine andere Anforderung von derselben IP / demselben Agenten eingeht, während sich die erste Anforderung in der Warteschlange befindet, ignorieren Sie sie. Dies sollte automatisch die Last von den Bots abwerfen.

BEARBEITEN: Neben der Verwendung von Bildern besteht eine weitere Option darin, den Text zum Kaufen / Nicht-Kaufen mit Javascript auszufüllen. Bots interpretieren Javascript selten, sodass sie es nicht sehen würden


1
Ich würde sicherstellen, dass sich auch der "Standardtext" ändert. Dies würde verhindern, dass die Scraping-App nur das Bild mit einem vorherigen Bild vergleicht und auf eine signifikante Änderung wartet. +1. Großartige Idee.
Frank Krueger

1
Änderung des "endgültigen Vorschlags": Wenn eine zweite Anfrage von einer Adresse eingeht, während eine vorherige Anfrage von derselben Adresse aussteht, verwerfen Sie die erste Anfrage und stellen Sie die zweite in die Warteschlange. Dies ist eine Strafe für das Hämmern der Site, anstatt die Seite laden zu lassen.
Dave Sherohman

@ [Frank Krueger]: Ich dachte, ich hätte das impliziert, aber beim erneuten Lesen habe ich es wohl nicht getan - danke, dass du darauf hingewiesen hast! Es kann auch nützlich sein, das Standardtextbild nur wenige Pixel ändern zu lassen, um Vergleiche anzustellen, und / oder nahezu unsichtbaren Text im Wasserzeichenstil zu generieren, um weitere Probleme mit Bots zu verursachen
Steven A. Lowe

@ [Dave Sherohman]: Sie könnten, aber das könnte dazu führen, dass die Warteschlange abläuft. Es ist vielleicht besser, die neuen Anforderungen zum sofortigen Abwerfen der Last einfach zu verwerfen - Tests / Profilerstellung würde mit Sicherheit sagen, was besser ist, aber danke für einen guten Vorschlag!
Steven A. Lowe

Ich kann es nicht ertragen, dass du ihm gesagt hast, er soll im Grunde nachgeben. Ich weiß, dass du es für unmöglich hältst, aber ich bin anderer Meinung. Wenn es einen Willen gibt, gibt es immer einen Weg. Es ist wirklich wenig inspirierend und traurig, eine Niederlage so einfach zuzulassen. Wenn das Original-Poster liest, ist dies möglich. Die Lösung muss jedoch nach der Analyse der Verkehrsprotokolle individuell gestaltet werden. Sie können aktuelle Methoden verhindern und sie zukunftssicher machen, um dies noch zu verhindern unbenutzte Methoden. Auch in Bezug auf JavaScript führt das Webbrowser-Steuerelement JavaScript in Echtzeit aus, ohne dass eine weitere Engine erforderlich ist - sie können sich mit dem Dom anlegen und ihr eigenes JavaScript ausführen! Opps
Erx_VB.NExT.Coder

30

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

Finden Sie heraus, nach welchen Daten die Bots suchen. Füttere sie mit den Daten, nach denen sie suchen, wenn du den Mist NICHT verkaufst. Tun Sie dies auf eine Weise, die menschliche Benutzer nicht stört oder verwirrt. Wenn die Bots die zweite Phase auslösen, melden sie sich an und füllen das Formular aus, um 100 USD Roombas anstelle von BOC zu kaufen. Dies setzt natürlich voraus, dass die Bots nicht besonders robust sind.

Eine andere Idee ist es, zufällige Preissenkungen im Laufe des Verkaufszeitraums zu implementieren. Wer würde eine zufällige Tasche für 150 Dollar kaufen, wenn Sie klar sagen, dass sie nur 20 Dollar wert ist? Niemand außer übereifrigen Bots. Aber dann 9 Minuten später sind es 35 Dollar ... dann 17 Minuten später sind es 9 Dollar. Oder Wasauchimmer.

Sicher, die Zombie-Könige könnten reagieren. Es geht darum, dass ihre Fehler für sie sehr kostspielig werden (und dass sie Sie dafür bezahlen, dass Sie sie bekämpfen).

All dies setzt voraus, dass Sie einige Bot-Lords verärgern möchten, was möglicherweise nicht zu 100% ratsam ist.


Denken Sie nicht, dass es wünschenswert ist, Bot-Lords zu verärgern, aber Sie haben hier eine interessante Idee.
Shawn Miller

7
Ich stimme zu und ich mag diese sich wiederholende Idee, die Bots dazu zu bringen, falsche Einkäufe zu tätigen. Es zahlt sich aus, und da sie den ToS bereits brechen, können sie sich kaum beschweren.
Nicholas Flynt

22

Das Problem scheint also wirklich zu sein: Die Bots wollen ihre "Tasche 'o Mist", weil sie einen hohen wahrgenommenen Wert zu einem niedrigen wahrgenommenen Preis hat. Manchmal bieten Sie diesen Artikel an und die Bots lauern und warten darauf, ob er verfügbar ist. Dann kaufen sie den Artikel.

Da es so aussieht, als ob die Bot-Besitzer einen Gewinn machen (oder möglicherweise einen Gewinn machen), besteht der Trick darin, dies für sie unrentabel zu machen, indem sie sie ermutigen , den Mist zu kaufen.

Zuerst immer bietet die „Tasche‚o Mist“.

Zweitens stellen Sie sicher, dass Mist normalerweise Mist ist.

Drittens drehen Sie den Mist häufig.

Einfach, nein?

Du brauchst ein permanentes "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 der Empfänger schrecklich verärgert sein, dass er 10 Dollar für einen kaputten Zahnstocher bezahlt hat. Und dann einen leeren Müllsack. Und dann etwas Schmutz von der Unterseite Ihres Schuhs.

Wenn sie in relativ kurzer Zeit genug von diesem Mist kaufen (und Sie überall große Haftungsausschlüsse haben, die erklären, warum Sie das tun), verlieren sie eine faire "Tasche 'o Bargeld" auf Ihrem " bag 'o crap ". Selbst menschliches Eingreifen (Überprüfung, ob der Mist kein Mist ist) kann fehlschlagen, wenn Sie den Mist oft genug drehen. Heck, vielleicht werden die Bots etwas bemerken und nichts kaufen, was zu kurz in der Rotation war, aber das bedeutet, dass die Menschen den Nicht-Mist kaufen werden.

Ihre Stammkunden sind möglicherweise so amüsiert, dass Sie daraus einen riesigen Marketinggewinn machen können. Veröffentlichen Sie, wie viel von dem "Mist" -Karpfen verkauft wird. Die Leute werden zurückkommen, um zu sehen, wie hart die Bots gebissen wurden.

Update: Ich gehe davon aus, dass Sie vorab einige Anrufe erhalten, wenn sich Leute beschweren. Ich glaube nicht, dass Sie das ganz aufhalten können. Wenn dies jedoch die Bots tötet, können Sie es jederzeit stoppen und später neu starten.


15
  1. Verkaufe den Gegenstand an Menschen, die keine Skripte schreiben.

  2. Halten Sie die Site mit einer Geschwindigkeit laufen, die nicht von Bots verlangsamt wird.

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

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

Im Internet weiß niemand, dass Sie ein Hund sind

Nun, niemand weiß, dass du auch ein Bot bist. Es gibt keine programmatische Möglichkeit, festzustellen, ob sich am anderen Ende der Verbindung ein Mensch befindet oder nicht, ohne dass die Person etwas tun muss. Das Verhindern, dass Skripte / Bots Dinge im Web tun, ist der ganze Grund, warum CAPTCHAs erfunden wurden. Es ist nicht so, dass dies ein neues Problem ist, für das nicht viel Aufwand aufgewendet wurde. Wenn es einen besseren Weg gäbe, der den Ärger für echte Benutzer, den ein CAPTCHA macht, nicht mit sich bringt, würde ihn jeder bereits nutzen.

Ich denke, Sie müssen sich der Tatsache stellen, dass ein gutes CAPTCHA der einzige Weg ist, dies zu tun, wenn Sie Bots von Ihrer Bestellseite fernhalten möchten. Wenn die Nachfrage nach Ihrem zufälligen Mist hoch genug ist, dass die Leute bereit sind, diese Anstrengungen zu unternehmen, um ihn zu bekommen, werden legitime Benutzer nicht von einem CAPTCHA abgeschreckt.


+1 für, wenn sie es wollen, ein Captcha wird sie nicht aufhalten ... und für den Cartoon.
Martin

13

Die Methode, mit der Woot dieses Problem bekämpft, verändert das Spiel buchstäblich. Wenn sie einen außerordentlich begehrenswerten Artikel zum Verkauf anbieten, lassen sie Benutzer ein Videospiel spielen, um es zu bestellen.

Dies bekämpft nicht nur erfolgreich Bots (sie können leicht geringfügige Änderungen am Spiel vornehmen, um automatische Spieler zu vermeiden, oder sogar ein neues Spiel für jeden Verkauf bereitstellen), sondern vermittelt den Benutzern auch den Eindruck, den gewünschten Gegenstand zu "gewinnen", während sie langsamer werden den Bestellvorgang.

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, bei der es einfach keine rein technischen Lösungen gab.


Ihr gesamtes Geschäftsmodell basiert auf "Wer zuerst kommt, mahlt zuerst". Sie können nicht das tun, was die Radiosender getan haben (sie machen nicht mehr den ersten Anrufer zum Gewinner, sie machen den 5., 20. oder 13. Anrufer zum Gewinner) - es entspricht nicht Ihrer Hauptfunktion.

Nein, es gibt keine Möglichkeit, dies zu tun, ohne das Bestellerlebnis für die echten Benutzer zu ändern.

Angenommen, Sie implementieren alle diese Taktiken. Wenn ich mich für wichtig halte, bringe ich einfach 100 Mitarbeiter dazu, mit mir zu arbeiten. Wir erstellen Software für die Arbeit auf unseren 100 separaten Computern und rufen Ihre Site 20 Mal pro Sekunde auf (5 Sekunden zwischen den Zugriffen für jeden Benutzer). Cookie / Konto / IP-Adresse).

Sie haben zwei Stufen:

  1. Titelseite ansehen
  2. Bestellung

Sie können kein Captcha-Blocking Nr. 1 setzen - das wird echte Kunden verlieren ("Was? Ich muss jedes Mal ein Captcha lösen, wenn ich den neuesten Woot sehen möchte?!?").

Meine kleine Gruppe schaut also zeitlich so zu, dass wir ungefähr 20 Schecks pro Sekunde erhalten. Wer zuerst die Änderung sieht, benachrichtigt alle anderen (automatisch), die die Startseite erneut laden, dem Bestelllink folgen und die Transaktion ausführen ( Dies kann auch automatisch geschehen, es sei denn, Sie implementieren Captcha und ändern es für jeden Wootoff / Boc.

Sie können ein Captcha vor # 2 setzen, und während Sie es nicht mögen, ist dies möglicherweise die einzige Möglichkeit, um sicherzustellen, dass echte Benutzer die Produkte erhalten, selbst wenn Bots die Titelseite sehen.

Aber selbst mit Captcha hätte meine kleine 100-köpfige Band immer noch einen bedeutenden First-Mover-Vorteil - und man kann nicht sagen, dass wir keine Menschen sind. Wenn Sie anfangen, unsere Zugriffe zeitlich zu steuern, fügen wir nur etwas Jitter hinzu. Wir konnten zufällig auswählen, welcher Computer aktualisiert werden soll, damit sich die Reihenfolge der Zugriffe ständig ändert - aber immer noch genug wie ein Mensch aussieht.

Entfernen Sie zuerst die einfachen Bots

Sie benötigen eine adaptive Firewall, die Anforderungen überwacht, und wenn jemand die offensichtlich dumme Sache tut - mehr als einmal pro Sekunde an derselben IP-Adresse zu aktualisieren, wenden Sie Taktiken an, um sie zu verlangsamen (Pakete verwerfen, abgelehnte zurücksenden oder 500 Fehler usw. ).

Dies sollte Ihren Datenverkehr erheblich verringern und die Taktik der Bot-Benutzer ändern.

Zweitens machen Sie den Server blitzschnell.

Das willst du wirklich nicht hören ... aber ...

Ich denke, was Sie brauchen, ist eine vollständig benutzerdefinierte Lösung von unten nach oben.

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

Apache, lighthttpd usw. eignen sich hervorragend, um flexibel zu sein, aber Sie betreiben eine Website mit einem einzigen Zweck, und Sie müssen wirklich in der Lage sein, mehr zu tun, als die aktuellen Server können (sowohl beim Umgang mit Datenverkehr als auch bei der angemessenen Bekämpfung von Bots) ).

Wenn Sie eine weitgehend statische Webseite (etwa alle 30 Sekunden aktualisiert) auf einem benutzerdefinierten Server bereitstellen, sollten Sie nicht nur in der Lage sein, die 10-fache Anzahl von Anforderungen und Datenverkehr zu verarbeiten (da der Server nichts anderes tut, als die Anforderung abzurufen und zu lesen die Seite aus dem Speicher in den TCP / IP-Puffer), aber es gibt Ihnen auch Zugriff auf Metriken, die Ihnen helfen können, Bots zu verlangsamen. Durch Korrelieren von IP-Adressen können Sie beispielsweise einfach mehr als eine Verbindung pro Sekunde pro IP blockieren. Menschen können nicht schneller gehen, und selbst Menschen, die dieselbe NAT-IP-Adresse verwenden, werden nur selten blockiert. Sie möchten einen langsamen Block ausführen - lassen Sie die Verbindung eine volle Sekunde lang in Ruhe, bevor Sie die Sitzung offiziell beenden. Dies kann in eine Firewall eingespeist werden, um besonders ungeheuerlichen Tätern längerfristige Blockaden zu geben.

Aber die Realität ist, dass es, egal was Sie tun, keine Möglichkeit gibt, einen Menschen von einem Bot zu unterscheiden, wenn der Bot von einem Menschen für einen einzigen Zweck speziell angefertigt wurde. Der Bot ist lediglich ein Stellvertreter für den Menschen.

Fazit

Am Ende des Tages können Sie einen Menschen und einen Computer nicht voneinander unterscheiden, um die Titelseite anzusehen. Sie können Bots beim Bestellschritt stoppen, aber die Bot-Benutzer haben immer noch einen First-Mover-Vorteil und Sie müssen immer noch eine große Menge verwalten.

Sie können Blöcke für die einfachen Bots hinzufügen, wodurch die Messlatte höher gelegt wird und weniger Leute sich darum kümmern. Das kann reichen.

Aber ohne Ihr Grundmodell zu ändern, haben Sie kein Glück. Das Beste, was Sie tun können, ist, sich um die einfachen Fälle zu kümmern, den Server so schnell zu machen, dass reguläre Benutzer es nicht bemerken, und so viele Artikel zu verkaufen, dass selbst wenn Sie ein paar Millionen Bots haben, so viele reguläre Benutzer sie erhalten .

Sie könnten in Betracht ziehen, einen Honeypot einzurichten und Benutzerkonten als Bot-Benutzer zu markieren, aber das hat eine enorme negative Community-Gegenreaktion.

Jedes Mal, wenn ich an ein "Nun, was ist mit dem ..." denke, kann ich dem mit einer geeigneten Bot-Strategie begegnen.

Selbst wenn Sie die Startseite zu einem Captcha machen, um zur Bestellseite zu gelangen ("Die Bestellschaltfläche dieses Artikels ist blau mit rosa Schimmern, irgendwo auf dieser Seite"), öffnen die Bots einfach alle Links auf der Seite und verwenden die jeweils verfügbaren zurück mit einer Bestellseite. Das ist einfach keine Möglichkeit, dies zu gewinnen.

Machen Sie die Server schnell, geben Sie auf der Bestellseite eine reCaptcha ein (die einzige, die ich gefunden habe, die sich nicht leicht täuschen lässt, die aber für Ihre Anwendung wahrscheinlich viel zu langsam ist), und überlegen Sie, wie Sie das Modell geringfügig ändern können Stammbenutzer haben genauso gute Chancen wie Bot-Benutzer.

-Adam


"Jedes Mal, wenn ich an ein" Nun, was ist mit dem ... "denke, kann ich dem immer mit einer geeigneten Bot-Strategie begegnen." Ich bin beim Entwerfen meines Authentifizierungssystems zu dem gleichen Schluss gekommen, ABER - hier gibt es einen Unterschied Ich bezweifle diese Logik: False Positives sind kein großes Problem
Jens Roland

(Fortsetzung) Wenn beispielsweise einige echte Benutzer hier und da nicht in der Lage sind, die Sonderangebote zu erhalten, ist dies eigentlich kein großer Dealbreaker (solange sie nicht wissen, was sie vermissen). In einem Authentifizierungssystem ist es ein Dealbreaker - Sie möchten nicht, dass Benutzer daran gehindert werden, sich anzumelden
Jens Roland

(Fortsetzung) Dies bedeutet, dass Sie das Woot-System restriktiver gestalten können als herkömmliche Spambot-Gegenmaßnahmen. Aus diesem Grund können Sie die Bots möglicherweise effektiv vereiteln.
Jens Roland

(Jetzt, da ich darüber nachgedacht habe, kann ich mir keinen Weg vorstellen, der funktioniert und der auch Distributd / Botnet-Angriffe vereitelt.)
Jens Roland

11

Haftungsausschluss: Diese Antwort bezieht sich nicht auf die Programmierung. Es wird jedoch zunächst versucht, den Grund für Skripte anzugreifen.

Eine andere Idee ist, wenn Sie wirklich eine begrenzte Menge zu verkaufen haben, warum ändern Sie sie nicht von einer First-Come-First-Served-Methode? Es sei denn natürlich, der Hype ist Teil Ihres Marketingplans.

Es gibt viele andere Möglichkeiten, und ich bin sicher, andere können sich einige andere vorstellen:

  • eine Bestellwarteschlange (Vorbestellsystem) - Einige Skripte befinden sich möglicherweise immer noch vorne in der Warteschlange, aber es ist wahrscheinlich schneller, die Informationen einfach manuell einzugeben.

  • ein Gewinnspielsystem (jeder, der versucht, eines zu bestellen, wird in das System eingegeben) - Auf diese Weise haben die Personen mit den Skripten genau die gleichen Chancen wie diejenigen ohne.

  • Warteschlange mit hoher Priorität - Wenn es wirklich einen hohen wahrgenommenen Wert gibt, sind die Leute möglicherweise bereit, mehr zu zahlen. Implementieren Sie eine Bestellwarteschlange, aber lassen Sie die Leute mehr bezahlen, um höher in die Warteschlange gestellt zu werden.

  • Auktion (Gutschrift geht an David Schmitt für diese, Kommentare sind meine eigenen) - Die Leute können immer noch Skripte verwenden, um in letzter Minute einzusteigen, aber es ändert nicht nur die Preisstruktur, die Leute erwarten, dass sie mit anderen kämpfen . Sie können auch Maßnahmen ergreifen, um die Anzahl der Gebote in einem bestimmten Zeitraum zu begrenzen, Personen dazu zu bringen, vorab einen Autorisierungscode einzuholen usw.


1
Vielen Dank. Ich wusste, dass es noch andere gab.
lc.

Jedes Gewinnspielsystem wird nur überlastet, um die Chancen zugunsten des Bots zu erhöhen
Andy Dent

Nicht, wenn Sie es auf eine pro Person / Haushalt / (physische) Adresse beschränken, wird es nicht
lc.

11

Egal wie sicher die Nazis dachten, ihre Kommunikation sei, die Verbündeten brachen oft ihre Botschaften. Unabhängig davon, wie Sie versuchen, Bots daran zu hindern, Ihre Website zu nutzen, werden die Bot-Besitzer einen Weg finden, um dies zu umgehen. Es tut mir leid, wenn dich das zum Nazi macht :-)

Ich denke, eine andere Denkweise ist erforderlich

  • Versuchen Sie nicht, Bots daran zu hindern, Ihre Website zu nutzen
  • Versuchen Sie nicht, das Problem sofort zu beheben, sondern spielen Sie das lange Spiel

Stellen Sie sich vor, dass es keine Rolle spielt, ob der Kunde Ihrer Website ein Mensch oder ein Bot ist. Beide zahlen nur Kunden. aber einer hat einen unfairen Vorteil gegenüber dem anderen. Einige Benutzer ohne viel soziales Leben (Einsiedler) können für die anderen Benutzer Ihrer Website genauso ärgerlich sein wie Bots.

Notieren Sie die Zeit, zu der Sie ein Angebot veröffentlichen, und die Zeit, zu der sich ein Konto für den Kauf entscheidet.

Auf diese Weise können Sie aufzeichnen, wie schnell der Kunde Produkte kauft.

Variieren Sie die Tageszeit, zu der Sie Angebote veröffentlichen.

Haben Sie beispielsweise ein 3-Stunden-Fenster, das zu einer dunklen Tageszeit beginnt (Mitternacht?). Nur Bots und Einsiedler aktualisieren eine Seite 3 Stunden lang ständig, um innerhalb von Sekunden eine Bestellung zu erhalten. Variieren Sie niemals die Basiszeit, sondern nur die Größe des Fensters.

Im Laufe der Zeit wird ein Bild entstehen.

01: Sie können innerhalb von Sekunden nach dem Start sehen, welche Konten regelmäßig Produkte kaufen. Vermutlich handelt es sich um Bots.

02: Sie können sich auch das Zeitfenster ansehen, das für die Angebote verwendet wird. Wenn das Fenster 1 Stunde beträgt, sind einige frühe Käufer Menschen. Ein Mensch wird sich jedoch selten 4 Stunden lang erfrischen. Wenn die verstrichene Zeit zwischen Veröffentlichung / Kauf unabhängig von der Fensterdauer ziemlich konsistent ist, ist das ein Bot. Wenn die Veröffentlichungs- / Kaufzeit für kleine Fenster kurz und für große Fenster länger wird, ist das ein Einsiedler!

Anstatt Bots daran zu hindern, Ihre Website zu nutzen, verfügen Sie über genügend Informationen, um Ihnen mitzuteilen, welche Konten sicherlich von Bots verwendet werden und welche Konten wahrscheinlich von Einsiedlern verwendet werden. Was Sie mit diesen Informationen tun, liegt bei Ihnen, aber Sie können sie auf jeden Fall verwenden, um Ihre Website für Menschen, die ein Leben haben, fairer zu gestalten.

Ich denke, das Verbot der Bot-Accounts wäre sinnlos, es wäre so, als würde man Hitler anrufen und sagen: "Danke für die Positionen Ihrer U-Boote!" Irgendwie müssen Sie die Informationen so verwenden, dass die Kontoinhaber sie nicht erkennen. Mal sehen, ob ich mir etwas ausdenken kann .....

Bestellungen in einer Warteschlange bearbeiten:

Wenn der Kunde eine Bestellung aufgibt, erhält er sofort eine Bestätigungs-E-Mail, in der er darüber informiert wird, dass seine Bestellung in eine Warteschlange gestellt wurde, und wird benachrichtigt, wenn sie bearbeitet wurde. Ich erlebe so etwas bei Bestellung / Versand bei Amazon und es stört mich überhaupt nicht. Es macht mir nichts aus, Tage später eine E-Mail zu erhalten, in der mir mitgeteilt wird, dass meine Bestellung versandt wurde, solange ich sofort eine E-Mail bekomme, die mir dies mitteilt Amazon weiß, dass ich das Buch will. In Ihrem Fall wäre es eine E-Mail für

  1. Ihre Bestellung wurde aufgegeben und befindet sich in einer Warteschlange.
  2. Deine Bestellung wurde bearbeitet.
  3. Ihre Bestellung wurde versandt.

Benutzer denken, dass sie in einer fairen Warteschlange stehen. Verarbeiten Sie Ihre Warteschlange alle 1 Stunde, sodass auch normale Benutzer eine Warteschlange haben, um keinen Verdacht zu erregen. Verarbeiten Sie Bestellungen von Bot- und Einsiedlerkonten erst, wenn sie für die "durchschnittliche Bestellzeit + x Stunden" in der Warteschlange standen. Bots effektiv auf Menschen reduzieren.


Was bedeutet das? :-)
Peter Morris

Ah danke :-) Ich erwähne Nazis, weil ich sehr an Geschichten aus dem Zweiten Weltkrieg über den Bletchley Park interessiert bin :-) Einige der Geschichten darüber, wie Nachrichten gebrochen wurden, verwendeten eine andere mentale Herangehensweise an das Problem, beispielsweise die Annahme, dass die Betreiber zu faul waren, um die zu ändern Codes aus der Nacht zuvor :-)
Peter Morris

10

Ich sage, legen Sie die Preisinformationen mithilfe einer API offen. Dies ist die nicht intuitive Lösung, aber sie gibt Ihnen die Kontrolle über die Situation. Fügen Sie der API einige Einschränkungen hinzu, um sie etwas weniger funktionsfähig als die Website zu machen.

Sie können das gleiche für die Bestellung tun. Sie können mit kleinen Änderungen an der API-Funktionalität / -Leistung experimentieren, bis Sie den gewünschten Effekt erzielen.

Es gibt Proxys und Botnets, um IP-Prüfungen zu verhindern. Es gibt Captcha-Leseskripte, die extrem gut sind. Es gibt sogar Arbeiterteams in Indien, die Captchas für einen kleinen Preis besiegen. Jede Lösung, die Sie finden können, kann vernünftigerweise besiegt werden. Sogar die Lösungen von Ned Batchelder können mithilfe eines WebBrowser-Steuerelements oder eines anderen simulierten Browsers in Kombination mit einem Botnetz oder einer Proxy-Liste überholt werden.


8

Dazu verwenden wir derzeit die neueste Generation von BigIP-Load-Balancern von F5. Das BigIP verfügt über erweiterte Verkehrsmanagementfunktionen, mit denen Scraper und Bots anhand der Häufigkeit und der Verwendungsmuster identifiziert werden können, selbst aus einer Reihe von Quellen hinter einer einzelnen IP. Es kann diese dann drosseln, ihnen alternative Inhalte bereitstellen oder sie einfach mit Headern oder Cookies versehen, damit Sie sie in Ihrem Anwendungscode identifizieren können.


Dies ist genau die Lösung, die ich vorschlagen wollte, insbesondere die automatische Drosselung. Sie könnten Ihre eigenen rollen, verlassen sich nur auf eine regelmäßige bis fortgeschrittene Signalanalyse.
wds

7

Lassen Sie mich zunächst zusammenfassen, was wir hier tun müssen. Mir ist klar, dass ich nur die ursprüngliche Frage paraphrasiere, aber es ist wichtig, dass wir dies zu 100% klarstellen, da es viele großartige Vorschläge gibt, die 2 oder 3 von 4 richtig machen, aber wie ich zeigen werde, brauchen Sie eine vielfältiger Ansatz, um alle Anforderungen abzudecken.

Voraussetzung 1: Das "Bot Slamming" loswerden:

Das schnelle "Zuschlagen" Ihrer Startseite beeinträchtigt die Leistung Ihrer Website und ist der Kern des Problems. Das "Slamming" kommt sowohl von Single-IP-Bots als auch - angeblich - von Botnetzen. Wir wollen beide loswerden.

Anforderung 2: Leg dich nicht mit der Benutzererfahrung an:

Wir könnten die Bot-Situation ziemlich effektiv beheben, indem wir ein unangenehmes Überprüfungsverfahren implementieren, wie das Anrufen eines menschlichen Bedieners, das Lösen einer Reihe von CAPTCHAs oder ähnliches, aber das wäre, als würde man jeden unschuldigen Flugzeugpassagier zwingen, nur für die geringe Chance durch verrückte Sicherheitsreifen zu springen die dümmsten Terroristen zu fangen. Oh warte - das machen wir eigentlich. Aber mal sehen , ob wir nicht , dass auf woot.com tun.

Anforderung 3: Vermeidung des Wettrüstens:

Wie Sie bereits erwähnt haben, möchten Sie nicht in das Spambot-Wettrüsten verwickelt werden. Sie können also keine einfachen Änderungen wie ausgeblendete oder durcheinandergebrachte Formularfelder, mathematische Fragen usw. verwenden, da es sich im Wesentlichen um Unklarheiten handelt, die trivial automatisch erkannt und umgangen werden können.

Anforderung 4: Verhinderung von Alarm-Bots:

Dies ist möglicherweise die schwierigste Ihrer Anforderungen. Selbst wenn wir eine effektive Herausforderung für die Überprüfung durch Menschen darstellen können, können Bots Ihre Startseite abfragen und den Scripter benachrichtigen, wenn ein neues Angebot vorliegt. Wir wollen diese Bots auch unmöglich machen. Dies ist eine stärkere Version der ersten Anforderung, da die Bots nicht nur keine leistungsschädigenden Schnellfeueranforderungen ausgeben können, sondern auch nicht genügend wiederholte Anforderungen ausgeben können, um rechtzeitig einen "Alarm" an den Scripter zu senden, um zu gewinnen das Angebot.


Okay, sehen wir uns an, ob wir alle vier Anforderungen erfüllen können. Erstens, wie ich bereits erwähnte, wird keine Maßnahme den Trick tun. Sie müssen ein paar Tricks kombinieren, um dies zu erreichen, und Sie müssen zwei Belästigungen schlucken:

  1. Eine kleine Anzahl von Benutzern wird benötigt, um durch Reifen zu springen
  2. Eine kleine Anzahl von Benutzern kann die Sonderangebote nicht erhalten

Mir ist klar, dass dies ärgerlich ist, aber wenn wir die 'kleine' Zahl klein genug machen können , hoffe ich, dass Sie zustimmen, dass die positiven die negativen überwiegen.

Erste Maßnahme: Benutzerbasierte Drosselung:

Dieser ist ein Kinderspiel, und ich bin sicher, dass Sie es bereits tun. Wenn ein Benutzer angemeldet ist und 600 Mal pro Sekunde (oder so) aktualisiert wird, reagieren Sie nicht mehr und fordern ihn auf, ihn abzukühlen. In der Tat drosseln Sie wahrscheinlich seine Anfragen deutlich früher, aber Sie bekommen die Idee. Auf diese Weise wird ein angemeldeter Bot gesperrt / gedrosselt, sobald er Ihre Site abfragt. Dies ist der einfache Teil. Die nicht authentifizierten Bots sind unser eigentliches Problem, also weiter zu ihnen:

Zweite Maßnahme: Eine Form der IP-Drosselung, wie von fast allen vorgeschlagen:

Egal was passiert, müssen Sie tun einige IP - basierte Drosselung der ‚bot Zuschlagen‘ zu vereiteln. Da es für Sie wichtig scheint nicht authentifiziert zu ermöglichen (nicht eingeloggt) Besucher die Sonderangebote zu erhalten, müssen Sie nur IP - Adressen , indem man zunächst gehen, und obwohl sie nicht perfekt sind, sie tun Arbeit gegen Single-IP - Bots. Botnets sind ein anderes Tier, aber ich werde darauf zurückkommen. Im Moment werden wir einige einfache Drosselungen vornehmen, um Single-IP-Bots mit Schnellfeuer zu besiegen.

Der Leistungseinbruch ist vernachlässigbar, wenn Sie die IP-Prüfung vor allen anderen Verarbeitungen ausführen, einen Proxyserver für die Drosselungslogik verwenden und die IPs in einer für die Suche zwischen Memcaches optimierten Baumstruktur speichern.

Dritte Maßnahme: Den Gashebel mit zwischengespeicherten Antworten verschleiern:

Bei gedrosselten Schnell-Single-IP-Bots müssen wir uns immer noch mit langsamen Single-IP-Bots befassen, d. H. Bots, die speziell so optimiert wurden, dass sie "unter dem Radar fliegen", indem sie Anforderungen etwas weiter voneinander entfernen, als es die Drosselung verhindert.

Um langsame Single-IP-Bots sofort unbrauchbar zu machen, verwenden Sie einfach die von abelenky vorgeschlagene Strategie: Stellen Sie allen IPs, die in den letzten 24 Stunden (oder so) entdeckt wurden, 10 Minuten alte zwischengespeicherte Seiten zur Verfügung. Auf diese Weise erhält jede IP eine "Chance" pro Tag / Stunde / Woche (abhängig von dem von Ihnen gewählten Zeitraum), und es gibt keinen sichtbaren Ärger für echte Benutzer, die nur auf "Nachladen" klicken, außer dass sie nicht gewinnen das Angebot.

Das Schöne an dieser Maßnahme ist, dass sie auch "Alarm-Bots" vereitelt, solange sie nicht aus einem Botnetz stammen.

(Ich weiß, dass Sie es wahrscheinlich vorziehen würden, wenn echte Benutzer immer wieder aktualisieren könnten, aber es gibt keine Möglichkeit, einen erfrischenden Spam-Menschen von einem anforderungsspammenden Bot ohne CAPTCHA oder ähnliches zu unterscheiden.)

Vierte Maßnahme: reCAPTCHA:

Sie haben Recht, dass CAPTCHAs die Benutzererfahrung beeinträchtigen und vermieden werden sollten. In einer Situation können sie jedoch Ihr bester Freund sein: Wenn Sie ein sehr restriktives System entwickelt haben, um Bots zu vereiteln, fängt dies aufgrund seiner Restriktivität auch eine Reihe von Fehlalarmen auf; Dann ermöglicht ein CAPTCHA, das als letzter Ausweg dient , den echten Benutzern, die erwischt werden, durch Ihre Drosselung zu rutschen (wodurch störende DoS-Situationen vermieden werden).

Der Sweet Spot ist natürlich, wenn ALLE Bots in Ihrem Netz gefangen werden, während extrem wenige echte Benutzer von CAPTCHA gestört werden.

Wenn Sie beim Bereitstellen der 10 Minuten alten zwischengespeicherten Seiten auch eine alternative, optionale , von CAPTCHA verifizierte Auffrischung der Titelseite anbieten , können Menschen, die wirklich weiter aktualisieren möchten, dies trotzdem tun, ohne die alte zwischengespeicherte Seite zu erhalten , aber auf Kosten der Notwendigkeit, für jede Aktualisierung ein CAPTCHA zu lösen. Das ist ärgerlich, aber optional nur für eingefleischte Benutzer, die eher verzeihen, weil sie wissen, dass sie das System spielen, um ihre Chancen zu verbessern, und dass verbesserte Chancen nicht frei sind.

Fünfte Maßnahme: Lockvogel Mist:

Christopher Mahan hatte eine Idee, die mir sehr gut gefallen hat, aber ich würde sie anders drehen. Jedes Mal, wenn Sie ein neues Angebot vorbereiten, bereiten Sie auch zwei andere "Angebote" vor, die kein Mensch auswählen würde, wie eine 12-mm-Flügelnuss für 20 US-Dollar. Wenn das Angebot auf der Startseite angezeigt wird, fügen Sie alle drei "Angebote" in dasselbe Bild ein, wobei die Nummern jedem Angebot entsprechen. Wenn der Benutzer / Bot den Artikel tatsächlich bestellt, muss er (ein Optionsfeld) das gewünschte Angebot auswählen, und da die meisten Bots nur raten würden, würden die Bots in zwei von drei Fällen wertlos kaufen Müll.

Natürlich geht es hier nicht um "Alarm-Bots", und es besteht eine (geringe) Chance, dass jemand einen Bot baut, der in der Lage ist, den richtigen Gegenstand auszuwählen. Das Risiko des versehentlichen Kaufs von Junk sollte jedoch dazu führen, dass sich Scripter vollständig von den vollautomatischen Bots abwenden.

Sechste Maßnahme: Botnet-Drosselung:

[gelöscht]

Okay ............ Ich habe jetzt den größten Teil meines Abends damit verbracht, darüber nachzudenken und verschiedene Ansätze auszuprobieren .... globale Verzögerungen .... Token auf Cookie-Basis .. Servieren in der Warteschlange ... 'Fremde Drosselung' .... Und es funktioniert einfach nicht. Das tut es nicht. Ich erkannte, dass der Hauptgrund, warum Sie noch keine Antwort akzeptiert hatten, darin bestand, dass niemand einen Weg vorgeschlagen hatte, einen verteilten / Zombienetz- / Botnetz-Angriff zu vereiteln ... also wollte ich ihn wirklich knacken. Ich glaube, ich habe das Botnet-Problem für die Authentifizierung in einem anderen Thread geknackt , daher hatte ich auch große Hoffnungen auf Ihr Problem. Aber mein Ansatz überträgt sich nicht darauf. Sie müssen nur IPs verwenden, und ein ausreichend großes Botnetz zeigt sich in keiner Analyse, die auf IP-Adressen basiert.

Da haben Sie es also : Mein sechster Takt ist nichts. Nichts. Postleitzahl. Sofern das Botnetz nicht klein und / oder schnell genug ist, um in die übliche IP-Drossel zu geraten, sehe ich keine wirksame Maßnahme gegen Botnetze, die keine explizite Überprüfung durch den Menschen wie CAPTHAs beinhalten. Es tut mir leid, aber ich denke, die Kombination der oben genannten fünf Maßnahmen ist die beste Wahl. Und Sie könnten wahrscheinlich nur mit Abelenkys 10-Minuten-Caching-Trick gut zurechtkommen.


Sehr gut gesagt. Danke für deinen Beitrag.
Shawn Miller

Bedeutet 3. nicht, dass Sie alte Seiten für alle AOL bereitstellen, vorausgesetzt, einige Bots stammen aus dem IP-Pool von AOL?
Andy Dent

@Andy: Nur wenn alle AOL-Benutzer dieselben IP-Adressen verwenden, die die Bots beim Spammen verwendet haben.
Jens Roland

6

Wie wäre es mit einer Verzögerung, die menschliche Interaktion erfordert, wie eine Art "CAPTCHA-Spiel". Zum Beispiel könnte es ein kleines Flash-Spiel sein, bei dem sie 30 Sekunden lang karierte Bälle platzen lassen und das Platzen fester Bälle vermeiden müssen (um Probleme mit Farbenblindheit zu vermeiden!). Das Spiel würde einen Zufallszahlen-Startwert erhalten und das Spiel würde die Koordinaten und Zeitstempel der angeklickten Punkte zusammen mit dem verwendeten Startwert an den Server zurücksenden.

Auf dem Server simulieren Sie die Spielmechanik mit diesem Startwert, um festzustellen, ob die Klicks tatsächlich die Bälle geplatzt hätten. Wenn ja, waren sie nicht nur Menschen, sondern sie brauchten 30 Sekunden, um sich zu validieren. Geben Sie ihnen eine Sitzungs-ID.

Sie lassen diese Sitzungs-ID tun, was sie möchte, aber wenn zu viele Anfragen gestellt werden, können sie nicht fortgesetzt werden, ohne erneut zu spielen.


Eine lustige Idee, die die Benutzererfahrung jedoch völlig ruiniert. Normale Besucher der Website betrachten dies als 30 Sekunden nutzloses Warten. 30 Sekunden nutzloses Warten beim Surfen im Internet oder bei der Verwendung von Web-Apps sind in keiner Weise akzeptabel.
Arve Systad

Normale Besucher würden die Verzögerung nicht auslösen, nur jemand, der eine unangemessene Anzahl von Anfragen stellt. Die Idee ist ein wenig frech, aber ich kann sehen, dass sie funktioniert, wenn die Zielgruppe an kleine Flash-Spiele gewöhnt ist :)
Paul Dixon

Unterhaltsame (und nahezu narrensichere) Idee, aber ich wäre irritiert (insbesondere während einer Bag Of Canaries-Raserei), und das würde massiv mehr Verarbeitung auf ihren Servern erfordern, um Überprüfungen durchzuführen (was ein großer Teil des Problems ist). Außerdem können Bots Blasen platzen lassen. Sie müssten häufig Regeln ändern.
Groxx

Angenommen, jedem Spiel wird ein Token ausgestellt, und Sie wissen, wann Sie die Token ausgegeben haben, müssen Sie nur einmal versuchen, einen Token zu verarbeiten, und zwar nur zwischen 30 und etwa 300 Sekunden nach seiner Ausgabe. Das Schöne daran ist, dass selbst wenn ein Bot die Blase platzt, sie 30 Sekunden darauf gewartet haben.
Paul Dixon

Vergessen wir nicht, dass der Verkehr begrenzt werden soll. Die Seite könnte sagen "Wir sind sehr beschäftigt, wenn Sie es eilig haben, spielen Sie dieses Spiel für 30 Sekunden oder versuchen Sie es in ein paar Minuten erneut ...
Paul Dixon

5

Es gibt bereits einige andere / bessere Lösungen, aber der Vollständigkeit halber dachte ich, ich würde dies erwähnen:

Wenn Ihr Hauptanliegen eine Leistungsverschlechterung ist und Sie sich mit echtem Hämmern beschäftigen , dann haben Sie es tatsächlich mit einem DoS-Angriff zu tun, und Sie sollten wahrscheinlich versuchen, damit entsprechend umzugehen. Ein üblicher Ansatz besteht darin, Pakete nach einer Anzahl von Verbindungen pro Sekunde / Minute / etc. Einfach von einer IP in der Firewall zu verwerfen. Beispielsweise verfügt die Standard-Linux-Firewall iptables über eine Standard-Operations-Matching-Funktion 'hashlimit', mit der Verbindungsanforderungen pro Zeiteinheit mit einer IP-Adresse korreliert werden können.

Obwohl diese Frage wahrscheinlich besser für das nächste SO-Derivat geeignet ist, das im letzten SO-Podcast erwähnt wurde, wurde sie noch nicht gestartet, daher ist es in Ordnung, sie zu beantworten :)

BEARBEITEN:
Wie von novatrust hervorgehoben, gibt es immer noch ISPs, die ihren Kunden tatsächlich KEINE IPs zuweisen. Daher würde ein Skript-Kunde eines solchen ISP effektiv alle Kunden von diesem ISP deaktivieren.


Leider haben einige ISPs gemeinsame Exit-IP-Adressen. Beispielsweise verfügt AOL über eine begrenzte Sammlung von IP-Adressen, unter denen die Mitglieder angezeigt werden: webmaster.info.aol.com/proxyinfo.html Ihre Lösung würde die Anzahl der Benutzer für viele ISPs stark einschränken.
Robert Venables

Wow, ich bin beeindruckt. Sachen wie diese sind noch im Gange?
Falstro

Heiliger Bimbam. Ich denke, AOL wird dann nicht auf meine Website zugreifen.
Karl

5

Schreiben Sie einen Reverse-Proxy auf einen Apache-Server vor Ihrer Anwendung, der ein Tarpit (Wikipedia-Artikel) implementiert , um Bots zu bestrafen. Es würde einfach eine Liste von IP-Adressen verwalten, die in den letzten Sekunden verbunden waren. Sie erkennen einen Burst von Anforderungen von einer einzelnen IP-Adresse und verzögern diese Anforderungen dann exponentiell, bevor Sie antworten.

Natürlich können mehrere Menschen von derselben IP-Adresse kommen, wenn sie sich in einer NAT-Netzwerkverbindung befinden, aber es ist unwahrscheinlich, dass ein Mensch Ihre Reaktionszeit von 2 ms bis 4 ms (oder sogar 400 ms) stört, während ein Bot behindert wird durch die zunehmende Verzögerung ziemlich schnell.


4
  1. Stellen Sie einen RSS-Feed bereit, damit Ihre Bandbreite nicht aufgebraucht wird.
  2. Lassen Sie beim Kauf alle zufällig bis zu 45 Sekunden warten , je nachdem, wonach Sie genau suchen. Was genau sind Ihre zeitlichen Einschränkungen?
  3. Geben Sie allen 1 Minute Zeit, um ihren Namen für die Zeichnung einzutragen und dann zufällig Personen auszuwählen. Ich denke, das ist der fairste Weg.
  4. Überwachen Sie die Konten (einige Male in die Sitzung aufnehmen und speichern?) Und fügen Sie Verzögerungen zu Konten hinzu, die scheinbar unter dem Schwellenwert für die menschliche Geschwindigkeit liegen. Dadurch werden die Bots zumindest so programmiert, dass sie langsamer werden und mit Menschen konkurrieren.

Dies sind interessante Konzepte, aber die "zufällige Auswahl" und die Wartezeit beseitigen einen Großteil der "Raserei", von der ich vermute, dass sie von Woot abhängt. Das Wegnehmen der zeitlichen Dringlichkeit hat die Seite ruiniert.
TM.

Wenn es wie eine Zeichnung aussieht, muss er sich mit Glücksspielgesetzen auseinandersetzen. Ist es nicht wert.
jmucchiello

4

Erstens ist es per Definition unmöglich, zustandslose, dh wirklich anonyme Transaktionen zu unterstützen und gleichzeitig die Bots von legitimen Benutzern zu trennen.

Wenn wir die Prämisse akzeptieren können, dass wir einem brandneuen Woot-Besucher bei seinen ersten Seitenhits Kosten auferlegen können, denke ich, dass ich eine mögliche Lösung habe. Aus Mangel an einem besseren Namen werde ich diese Lösung locker "Ein Besuch bei der DMV" nennen.

Nehmen wir an, es gibt ein Autohaus, das jeden Tag ein anderes neues Auto anbietet, und an manchen Tagen können Sie einen exotischen Sportwagen für jeweils 5 USD (Limit 3) plus 5 USD Zielgebühr kaufen.

Der Haken ist, dass das Autohaus verlangt, dass Sie das Autohaus besuchen und einen gültigen Führerschein vorzeigen, bevor Sie durch die Tür eintreten dürfen, um zu sehen, welches Auto zum Verkauf steht. Darüber hinaus müssen Sie einen gültigen Führerschein angegeben haben, um den Kauf tätigen zu können.

Dem erstmaligen Besucher (nennen wir ihn Bob) dieses Autohändlers wird die Einreise verweigert und er wird an das DMV-Büro (das sich direkt nebenan befindet) verwiesen, um einen Führerschein zu erhalten.

Andere Besucher mit einem gültigen Führerschein sind nach Vorlage ihres Führerscheins zugelassen. Eine Person, die sich selbst belästigt, indem sie den ganzen Tag herumlungert, die Verkäufer belästigt, Broschüren holt und den kostenlosen Kaffee und die Kekse leert, wird schließlich abgewiesen.

Nun zurück zu Bob ohne Lizenz - alles was er tun muss, ist den Besuch bei der DMV einmal zu ertragen. Danach kann er das Autohaus besuchen und jederzeit Autos kaufen, es sei denn, er hat versehentlich seine Brieftasche zu Hause gelassen oder seine Lizenz wird anderweitig zerstört oder widerrufen.

Der Führerschein in dieser Welt ist fast unmöglich zu fälschen.

Beim Besuch der DMV wird zunächst das Antragsformular in der Warteschlange "Start Here" abgerufen. Bob muss den ausgefüllten Antrag zu Fenster Nr. 1 bringen, wo der erste von vielen mürrischen Beamten seinen Antrag entgegennimmt, bearbeitet und, wenn alles in Ordnung ist, den Antrag für das Fenster abstempelt und ihn zum nächsten Fenster schickt. Und so geht Bob von Fenster zu Fenster und wartet darauf, dass jeder Schritt seiner Bewerbung ausgeführt wird, bis er schließlich das Ende erreicht und den Führerschein erhält.

Es macht keinen Sinn, die DMV kurzzuschließen. Wenn die Formulare nicht dreifach korrekt ausgefüllt werden oder in einem Fenster falsche Antworten gegeben werden, wird der Antrag zerrissen und der unglückliche Kunde zum Start zurückgeschickt.

Interessanterweise dauert es, egal wie voll oder leer das Büro ist, ungefähr die gleiche Zeit, um an jedem aufeinanderfolgenden Fenster gewartet zu werden. Selbst wenn Sie die einzige Person in der Schlange sind, scheint es, dass das Personal Sie gerne eine Minute hinter der gelben Linie warten lässt, bevor Sie "Weiter!"

Bei der DMV sieht es allerdings nicht ganz so schlimm aus. Während das Warten und Verarbeiten, um die Lizenz zu erhalten, läuft, können Sie sich in der DMV-Lobby eine sehr unterhaltsame und informative Werbung für das Autohaus ansehen. Tatsächlich läuft die Infomerik gerade lange genug, um die Zeit abzudecken, die Sie für die Erlangung Ihrer Lizenz benötigen.

Die etwas technischere Erklärung:

Wie ich ganz oben sagte, ist es notwendig, die Client-Server-Beziehung in einem gewissen Zustand zu halten, damit Sie Menschen von Bots trennen können. Sie möchten dies auf eine Weise tun, die den anonymen (nicht authentifizierten) menschlichen Besucher nicht übermäßig bestraft.

Dieser Ansatz erfordert wahrscheinlich eine clientseitige AJAX-y-Verarbeitung. Ein brandneuer Besucher von woot erhält den "Welcome New User!" Seite voller Text und Grafiken, deren vollständiges Laden (durch entsprechende serverseitige Drosselung) einige Sekunden dauert. Während dies geschieht (und der Besucher vermutlich gerade die Begrüßungsseite (n) liest), wird sein Identifizierungs-Token langsam zusammengestellt.

Nehmen wir zur Diskussion an, das Token (auch als "Führerschein" bezeichnet) besteht aus 20 Blöcken. Um jeden nachfolgenden Block zu erhalten, muss der clientseitige Code eine gültige Anforderung an den Server senden. Der Server enthält eine absichtliche Verzögerung (z. B.) 200 Millisekunden), bevor der nächste Block zusammen mit dem 'Stempel' gesendet wird, der für die nächste Blockanforderung erforderlich ist (dh die Stempel müssen von einem DMV-Fenster zum nächsten wechseln). Insgesamt müssen ca. 4 Sekunden vergehen, um den Vorgang abzuschließen Chunk-Challenge-Response-Chunk-Challenge-Response -...- Chunk-Challenge-Response-Abschlussprozess.

Am Ende dieses Vorgangs verfügt der Besucher über ein Token, mit dem er zur Produktbeschreibungsseite und damit zur Einkaufsseite wechseln kann. Das Token ist eine eindeutige ID für jeden Besucher und kann verwendet werden, um seine Aktivitäten zu drosseln.

Auf der Serverseite akzeptieren Sie nur Seitenaufrufe von Clients mit einem gültigen Token. Wenn es wichtig ist, dass letztendlich jeder die Seite sehen kann, verhängen Sie eine Zeitstrafe für Anfragen, bei denen ein gültiges Token fehlt.

Damit dies für den legitimen menschlichen Besucher relativ harmlos ist, muss der Token-Ausstellungsprozess im Hintergrund relativ unauffällig ablaufen. Daher die Notwendigkeit einer Begrüßungsseite mit unterhaltsamen Texten und Grafiken, die bewusst etwas verlangsamt wird.

Dieser Ansatz erzwingt eine Drosselung der Bots, um entweder ein vorhandenes Token zu verwenden oder die minimale Einrichtungszeit zu benötigen, um ein neues Token zu erhalten. Dies hilft natürlich nicht so sehr gegen ausgefeilte Angriffe mit einem verteilten Netzwerk von falschen Besuchern.


4

Sie können Bots auch mit einem Captcha nicht vollständig verhindern. Es kann jedoch schwierig sein, einen Bot zu schreiben und zu warten, und daher die Anzahl reduzieren. Insbesondere wenn Sie sie zwingen, ihre Bots täglich zu aktualisieren, verlieren die meisten das Interesse.

Hier sind einige Ideen, die das Schreiben von Bots erschweren sollen:

  • Führen Sie eine Javascript-Funktion aus. Javascript macht es viel schmerzhafter, einen Bot zu schreiben. Möglicherweise benötigen Sie ein Captcha, wenn sie kein Javascript ausführen, um weiterhin tatsächliche Nicht-Javascript-Benutzer zuzulassen (minimal).

  • Zeit die Tastenanschläge beim Eingeben in das Formular (wieder über Javascript). Wenn es nicht menschlich ist, lehnen Sie es ab. Es ist ein Schmerz, die menschliche Eingabe eines Bots nachzuahmen.

  • Schreiben Sie Ihren Code, um Ihre Feld-IDs täglich mit einem neuen Zufallswert zu aktualisieren. Dies wird sie zwingen, ihren Bot täglich zu aktualisieren, was schmerzhaft ist.

  • Schreiben Sie Ihren Code, um Ihre Felder täglich neu zu ordnen (offensichtlich nicht zufällig für Ihre Benutzer). Wenn sie sich auf die Feldreihenfolge verlassen, werden sie dadurch ausgelöst und die tägliche Wartung ihres Bot-Codes wird erneut erzwungen.

  • Sie könnten noch weiter gehen und Flash-Inhalte verwenden. Flash ist ein Schmerz, gegen den man einen Bot schreiben muss.

Im Allgemeinen können Sie wahrscheinlich das gesuchte Ziel erreichen, wenn Sie anfangen, sie nicht zu verhindern, sondern mehr Arbeit für sie zu leisten.


Menschen tippen jedoch manchmal nicht menschlich - Formularfüller.
Loren Pechtel

Sie müssen sehr unterschiedliche Schreibstile / -geschwindigkeiten berücksichtigen - von Hunt'n'Peck bis Touchtyping. Es ist nicht schwer, einen Bot zu schreiben, der irgendwo dazwischen liegt. Dinge wie variable Feld-IDs und Reihenfolge können durch Lesen und Parsen von Formularen umgangen werden, was nicht sehr schwierig ist.
Kornel

4

Halten Sie bei allen Produktankündigungen für nicht registrierte Benutzer eine Verzögerung von 5 Minuten ein. Gelegenheitsbenutzer werden dies nicht wirklich bemerken und Nicht-Gelegenheitsbenutzer werden trotzdem registriert.


3

Ich sehe nicht die große Belastung, die Sie durch die Überprüfung eingehender IPs geltend machen. Im Gegenteil, ich habe für einen meiner Kunden ein Projekt durchgeführt, das alle fünf Minuten die HTTP-Zugriffsprotokolle analysiert (es hätte in Echtzeit sein können, aber er wollte das aus irgendeinem Grund nicht, den ich nie vollständig verstanden habe) und Erstellt Firewall-Regeln, um Verbindungen von IP-Adressen zu blockieren, die eine übermäßige Anzahl von Anforderungen generieren, es sei denn, die Adresse kann als zu einer legitimen Suchmaschine gehörend (Google, Yahoo usw.) bestätigt werden.

Dieser Client führt einen Webhosting-Dienst aus und führt diese Anwendung auf drei Servern aus, die insgesamt 800-900 Domänen verwalten. Die maximale Aktivität liegt im Bereich von tausend Treffern pro Sekunde, und es gab nie ein Leistungsproblem. Firewalls können Pakete sehr effizient von Adressen auf der schwarzen Liste ablegen.

Und ja, es gibt definitiv eine DDOS-Technologie, die dieses Schema zunichte machen würde, aber er sieht das nicht in der realen Welt. Im Gegenteil, er sagt, es hat die Belastung seiner Server erheblich reduziert.


3

Mein Ansatz wäre es, mich auf nicht-technologische Lösungen zu konzentrieren (andernfalls treten Sie in ein Wettrüsten ein, das Sie verlieren oder für das Sie zumindest viel Zeit und Geld aufwenden). Ich würde mich auf die Abrechnungs- / Versandteile konzentrieren - Sie können Bots finden, indem Sie entweder mehrere Lieferungen an dieselbe Adresse oder mehrere Gebühren für eine einzelne Zahlungsmethode finden. Sie können dies sogar über mehrere Wochen hinweg tun. Wenn ein Benutzer also einen vorherigen Artikel erhalten hat (indem er sehr schnell reagiert), wird ihm diesmal möglicherweise eine Art "Handicap" zugewiesen.

Dies hätte auch den Nebeneffekt (vorteilhaft, würde ich denken, aber ich könnte mich in Bezug auf das Marketing in Ihrem Fall irren), vielleicht den Kreis der Menschen zu erweitern, die Glück haben und Woot kaufen.


3

Die meisten rein technischen Lösungen wurden bereits angeboten. Ich werde daher eine andere Sicht auf das Problem vorschlagen.

So wie ich es verstehe, werden die Bots von Leuten eingerichtet, die wirklich versuchen, die Taschen zu kaufen, die Sie verkaufen. Das Problem ist -

  1. Andere Leute, die keine Bots betreiben, verdienen eine Chance zu kaufen, und Sie bieten eine begrenzte Anzahl von Taschen an.
  2. Sie möchten Menschen auf Ihre Website locken und einfach die Taschen verkaufen.

Anstatt zu versuchen, die Bots zu vermeiden, können Sie potenziellen Taschenkäufern ermöglichen, eine E-Mail oder sogar ein SMS-Update zu abonnieren, um benachrichtigt zu werden, wann ein Verkauf stattfinden wird. Sie können ihnen sogar ein oder zwei Minuten Vorsprung geben (eine spezielle URL, unter der der Verkauf beginnt, zufällig generiert und mit der Post / SMS gesendet wird).

Wenn diese Käufer kaufen, um sie auf Ihrer Website zu kaufen, können Sie ihnen in Seitenbannern oder was auch immer zeigen, was Sie wollen. Diejenigen, die die Bots ausführen, werden es vorziehen, sich einfach bei Ihrem Benachrichtigungsdienst zu registrieren.

Die Bots-Läufer führen möglicherweise noch Bots in Ihrer Benachrichtigung aus, um den Kauf schneller abzuschließen. Einige Lösungen hierfür bieten einen Kauf mit einem Klick.

Übrigens, Sie haben erwähnt, dass Ihre Benutzer nicht registriert sind, aber es klingt so, als ob diejenigen, die diese Taschen kaufen, keine zufälligen Käufer sind, sondern Menschen, die sich auf diese Verkäufe freuen. Als solche könnten sie bereit sein, sich zu registrieren, um einen Vorteil beim Versuch zu erzielen, eine Tasche zu "gewinnen".

Im Wesentlichen schlage ich vor, das Problem eher als soziales als als als technisches Problem zu betrachten.

Asaf


2

Zeitblockieren Sie Benutzeragenten, die so viele Anfragen pro Minute stellen. Wenn Sie beispielsweise jemanden haben, der 10 Minuten lang genau alle 5 Sekunden eine Seite anfordert, ist er wahrscheinlich kein Benutzer ... Aber es könnte schwierig sein, dies richtig zu machen.

Wenn sie eine Warnung auslösen, leiten Sie jede Anforderung mit so wenig DB-IO wie möglich auf eine statische Seite mit einer Meldung um, die sie darüber informiert, dass sie in X Minuten wieder aktiviert werden können.

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


Ich habe dies bei einem persönlichen Projekt gemacht, es scheint eine gute Methode zu sein. Sie müssen sich nur alle IP-Adressen merken, wenn sie auf Ihre Seite gelangen, und Regeln festlegen, was es bedeutet, Ihre Seite zu oft aufzurufen. Das Problem ist, dass das OP sagte, das Überprüfen von IPs sei viel zu teuer, was ich nicht verstehe.
Karl

Wenn Sie die IP-Überprüfung selbst implementieren (dh in Ihrer Datenbank, über Ihr PHP-Skript oder was auch immer), ist dies ziemlich teuer. Lassen Sie die Firewall dies für Sie tun, und es wird viel praktikabler.
Rmeador

rmeador: Es scheint auch viel schwieriger zu sein, festzustellen, ob die Anfrage HTML oder andere Medien war. Wenn Ihre Seite 20 externe Elemente enthält, werden in 1-2 Sekunden mindestens 21 Anfragen für einen neuen Benutzer angezeigt.
Oli

2

Das Verhindern von DoS würde # 2 von @ davebugs Zielen, die er oben skizziert hat, besiegen: "Halten Sie die Site auf einer Geschwindigkeit, die nicht durch Bots verlangsamt wird", würde aber nicht unbedingt # 1 lösen: "Verkaufen Sie den Gegenstand an Nicht-Scripting-Menschen".

Ich bin sicher, ein Scripter könnte etwas schreiben, um knapp unter der übermäßigen Grenze zu skaten, die immer noch schneller wäre, als ein Mensch die Bestellformulare durchgehen könnte.


2

Also gut, die Spammer sind im Wettbewerb mit normalen Leuten, um die Auktion "Moor des Mistes" zu gewinnen? Warum nicht die nächste Auktion zu einer wörtlichen "Tüte Mist" machen? Die Spammer können gutes Geld für eine Tasche voller Hunde bezahlen, und wir alle lachen über sie.


2

Das Wichtigste dabei ist, das System zu ändern, um die Last von Ihrem Server zu entfernen und zu verhindern, dass Bots den Mistbeutel gewinnen, ohne die Botlords wissen zu lassen, dass Sie sie spielen, oder sie werden ihre Strategie überarbeiten. Ich glaube nicht, dass es eine Möglichkeit gibt, dies ohne eine Bearbeitung an Ihrem Ende zu tun.

Sie zeichnen also Treffer auf Ihrer Homepage auf. Immer wenn jemand auf die Seite trifft, wird diese Verbindung mit dem letzten Treffer verglichen. Wenn sie zu schnell war, wird eine Version der Seite ohne Angebot gesendet. Dies kann durch eine Art Lastausgleichsmechanismus erfolgen, der Bots (die Treffer, die zu schnell sind) an einen Server sendet, der einfach zwischengespeicherte Versionen Ihrer Homepage bereitstellt. echte Leute werden an den guten Server geschickt. Dies entlastet den Hauptserver und lässt die Bots denken, dass ihnen die Seiten noch korrekt zugestellt werden.

Noch besser, wenn das Angebot auf irgendeine Weise abgelehnt werden kann. Dann können Sie die Angebote immer noch auf dem Faux-Server machen, aber wenn der Bot das Formular ausfüllt, sagen Sie "Entschuldigung, Sie waren nicht schnell genug" :) Dann werden sie definitiv denken, dass sie noch im Spiel sind.


2

Woher wissen Sie, dass es Skripter gibt, die Bestellungen aufgeben?

Der Kern Ihres Problems besteht darin, dass Sie die Scripter nicht von den legitimen Benutzern trennen und sie daher nicht blockieren können. Woher wissen Sie also, dass es überhaupt Scripter gibt?

Wenn Sie eine Möglichkeit haben, diese Frage zu beantworten, verfügen Sie über eine Reihe von Merkmalen, mit denen Sie die Skripter filtern können.


2

Lassen Sie uns das Problem auf den Kopf stellen - Sie haben Bots, die Dinge kaufen, die echte Leute kaufen sollen. Wie wäre es, wenn Sie eine echte Chance schaffen, dass die Bots Dinge kaufen, die Sie nicht kaufen die wirklichen Leute kaufen wollen.

Haben Sie eine zufällige Chance für einige nicht angezeigte HTML-Dateien, von denen die Scraping-Bots glauben, dass sie die reale Situation sind, aber echte Menschen werden sie nicht sehen (und vergessen Sie nicht, dass echte Menschen Blinde einschließen, denken Sie also auch an Screenreader usw.) Dies führt dazu, dass Sie etwas exorbitant Teueres kaufen (oder den eigentlichen Kauf nicht tätigen, sondern Zahlungsdetails erhalten, die Sie auf eine Banlist setzen können).

Selbst wenn die Bots auf "Benachrichtigung des Benutzers" anstatt "Kauf tätigen" umschalten und möglicherweise genügend Fehlalarme erhalten, können Sie diese möglicherweise für Personen ausreichend wertlos machen (möglicherweise nicht für alle, aber eine gewisse Reduzierung des Betrugs ist möglich besser als gar keine) sich nicht darum zu kümmern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.