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:
- Ihre Website wird von Nicht-Menschen zugeschlagen, was alles für alle verlangsamt.
- 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
- Verkaufe den Gegenstand an Menschen, die keine Skripte schreiben.
- Halten Sie die Site mit einer Geschwindigkeit laufen, die nicht von Bots verlangsamt wird.
- Belästigen Sie die "normalen" Benutzer nicht mit Aufgaben, um zu beweisen, dass sie Menschen sind.
quelle
Antworten:
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.
quelle
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.
quelle
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:
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:
Nachteile
Was denken Sie?
quelle
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.
Einige andere Ideen:
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:
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):
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? :) :)
quelle
<form>
und bei der Übermittlung gesendet wird? Weil ein Bot das auch leicht kratzen kann.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 -
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
quelle
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.
quelle
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.
quelle
Sie möchten das wahrscheinlich nicht hören, aber # 1 und # 3 schließen sich gegenseitig aus.
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.
quelle
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:
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
quelle
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.
quelle
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
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.
Variieren Sie die Tageszeit, zu der Sie Angebote veröffentlichen.
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
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.
quelle
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.
quelle
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.
quelle
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:
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:
Zweite Maßnahme: Eine Form der IP-Drosselung, wie von fast allen vorgeschlagen:
Dritte Maßnahme: Den Gashebel mit zwischengespeicherten Antworten verschleiern:
Vierte Maßnahme: reCAPTCHA:
Fünfte Maßnahme: Lockvogel Mist:
Sechste Maßnahme: Botnet-Drosselung:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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 -
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
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle