Empêcher les scripteurs de claquer votre site web

j'ai accepté une réponse, mais malheureusement, je crois que nous sommes coincés avec notre scénario original pire: CAPTCHA tout le monde sur les tentatives d'achat de la merde . Brève explication: la mise en cache / les fermes web rendent impossible le suivi des hits, et toute solution de contournement (envoi d'une balise Web non mise en cache, écriture à une table unifiée, etc.) ralentit le site pire que ne le feraient les bots. Il est probable que certains matériels coûteux de Cisco ou similaire qui peuvent aider à une niveau, mais il est difficile de justifier le coût si CAPTCHA-ing tout le monde est une alternative. Je tenterai une explication plus complète plus tard, en plus de nettoyer ceci pour les futurs chercheurs (bien que d'autres soient invités à essayer, comme c'est wiki communautaire).

Situation

c'est à propos du sac de vente de merde sur woot.com. Je suis le président de Woot Workshop, la filiale de Woot qui fait le design, écrit les descriptions de produits, podcasts, blog postes, et modère les forums. Je travaille avec CSS / HTML et ne suis qu'à peine familiarisé avec les autres technologies. Je travaille en étroite collaboration avec les développeurs et j'ai discuté de toutes les réponses ici (et de nombreuses autres idées que nous avons eues).

la convivialité est une partie importante de mon travail, et rendre le site passionnant et amusant est la plupart du reste. C'est là que les trois buts ci-dessous dérivent. CAPTCHA nuit à la convivialité, et les robots volent le plaisir et l'excitation de nos ventes de merde.

les Bots claquent notre page d'accueil des dizaines de fois un deuxième scraping d'écran (et/ou numérisant notre RSS) pour la vente de merde aléatoire. Dès qu'ils voient ça, ça déclenche une deuxième étape du programme qui se connecte, clique j'en veux une, remplit le formulaire, et achète la merde.

Évaluation

lc : sur stackoverflow et d'autres sites qui utilisent cette méthode, ils traitent presque toujours avec authentifié utilisateurs (connectés), parce que la tâche tentée nécessite cela.

sur Woot, les utilisateurs anonymes (non connectés) peuvent consulter notre page d'accueil. En d'autres termes, les bots de claquement peuvent être non authentifiés (et essentiellement non traçables sauf par adresse IP).

donc nous sommes de retour à la recherche D'IPs, qui a) est assez inutile dans cette ère de réseautage cloud et zombies spambot et b) attrape trop d'innocents compte tenu du nombre d'entreprises qui viennent d'une adresse IP (sans parler des problèmes avec les fournisseurs de services Internet non-statiques et les résultats potentiels à essayer de suivre cela).

OH, et que les gens nous appellent serait le pire scénario possible. On peut leur dire de vous appeler?

BradC : les méthodes de Ned Batchelder semblent plutôt cool, mais elles sont assez fermement conçues pour vaincre les bots construits pour un réseau de sites. Notre problème est que les robots sont construits spécifiquement pour la défaite de notre site. Certaines de ces méthodes pourraient fonctionner pendant un court laps de temps jusqu'à ce que les scripteurs développent leurs bots pour ignorer le pot de miel, screen-scrape pour les noms d'étiquette à proximité au lieu des IDS de forme, et utiliser une commande de navigateur javascript-capable.

LC again : "à moins, bien sûr, que le battage médiatique fasse partie de votre plan de marketing."Oui, c'est bien lui. La surprise de quand l'objet apparaît, ainsi sous l'excitation, si vous parvenez à en obtenir un est probablement beaucoup plus important que de la merde à arriver. Tout ce qui élimine le premier arrivé/premier servi est préjudiciable au frisson de "gagner" la merde.

novatrust : et moi, pour ma part, je souhaite la bienvenue à nos nouveaux maîtres bot. En fait, nous offrons RSSfeeds pour permettre à des applications tierces de scanner notre site pour les informations sur les produits, mais pas à l'avance du site principal HTML. Si je l'interprète correctement, votre solution aide l'objectif 2 (problèmes de performance) en sacrifiant complètement l'objectif 1, et en résignant simplement le fait que les bots vont acheter la plupart des conneries. J'ai voté contre votre réponse, parce que votre pessimisme au dernier paragraphe me semble juste. Il semble y avoir pas de solution miracle ici.

le reste des réponses reposent généralement sur le suivi IP, qui, encore une fois, semble à la fois inutile (avec botnets/zombies / cloud networking) et préjudiciable (attraper de nombreux innocents qui viennent de même-IP destinations).

D'autres approches / idées? Mes développeurs n'arrêtent pas de dire "faisons juste CAPTCHA" mais j'espère qu'il y a des méthodes moins intrusives pour tous les humains qui veulent un peu de notre merde.

question originale

dites que vous vendez quelque chose de bon marché qui a une très grande valeur perçue, et vous avez une quantité très limitée. Aucun on sait exactement quand vous vendrez cet article. Et plus d'un million de personnes viennent régulièrement voir ce que vous vendez.

vous vous retrouvez avec des scripteurs et des bots essayant de programmer [a] comprendre quand vous vendez ledit article, et [b] s'assurer qu'ils sont parmi les premiers à l'acheter. Cela craint pour deux raisons:

  1. votre site est claqué par des non-humains, ralentissant tout pour tout le monde.
  2. Les scripteurs finissez par "gagner" le produit, ce qui fait que les habitués se sentent trompés.

une solution apparemment évidente est de créer quelques cerceaux pour vos utilisateurs de sauter à travers avant de passer leur commande, mais il ya au moins trois problèmes avec cela:

  • l'expérience utilisateur craint pour les humains, car ils doivent déchiffrer CAPTCHA, choisir le chat, ou résoudre un problème de mathématiques.
  • si le bénéfice perçu est suffisamment élevé, et la foule assez grand, certains vont trouver leur chemin autour de n'importe quel tweak, conduisant à une course aux armements. (Ceci est d'autant plus vrai que le tweak est plus simple; la forme cachée 'commentaires', réorganisant les éléments de forme, les étiquetant mal, le texte caché 'gotcha' tout fonctionnera une fois et doit ensuite être changée pour lutter contre cibler cette forme spécifique.)
  • même si les scripteurs ne peuvent pas "résoudre" votre tweak il ne les empêche pas de claquer votre page d'accueil, et puis sonnant une alarme pour le scripteur pour remplir l'ordre, manuellement. Étant donné qu'ils obtiennent l'avantage de résoudre [A], ils gagneront probablement encore [b] puisqu'ils seront les premiers humains atteignant la page d'ordre. En outre, 1. cela se produit toujours, provoquant des erreurs de serveur et une diminution des performances pour tout le monde.

une autre solution consiste à surveiller les IP qui frappent trop souvent, à les bloquer du pare-feu ou à les empêcher de commander. Cela pourrait résoudre 2. et de prévenir [b] mais la performances de balayage pour l'IPs est énorme et serait susceptible de causer plus de problèmes comme 1. que les scripteurs causaient par eux-mêmes. En outre, la possibilité de réseau cloud et zombies spambot rend la vérification IP assez inutile.

une troisième idée, forcer le formulaire de commande à être chargé pendant un certain temps (disons, une demi-seconde) pourrait ralentir la progression des commandes rapides, mais encore une fois, les scripteurs seraient toujours les premières personnes à entrer, à toute vitesse non au détriment des utilisateurs réels.

Objectifs

  1. vendre l'article à des humains non scripteurs.
  2. faites tourner le site à une vitesse qui n'est pas ralentie par les bots.
  3. n'embêtez pas les utilisateurs "normaux" avec des tâches à accomplir pour prouver qu'ils sont humains.
481
demandé sur Dave Rutledge 2009-01-16 18:49:20

30 réponses

Que Diriez-vous de mettre en œuvre quelque chose comme cela fait avec les CAPTCHAs?

si vous utilisez le site normalement, vous n'en verrez probablement jamais. Si vous vous trouvez à recharger la même page trop souvent, postez des commentaires successifs trop rapidement, ou quelque chose d'autre qui déclenche une alarme, faites-leur prouver qu'ils sont humains. Dans votre cas, il s'agirait probablement de recharges constantes de la même page, en suivant chaque lien sur une page rapidement, ou en remplissant un formulaire de commande trop rapidement pour être humain.

S'ils échouent le contrôle x fois dans une rangée (disons, 2 ou 3), donner à cette IP un timeout ou une autre mesure de ce genre. Puis, à la fin du délai, renvoyez-les de nouveau au chèque.


comme vous avez des utilisateurs non enregistrés qui accèdent au site, vous n'avez que des adresses IP pour y accéder. Vous pouvez publier des sessions à chaque navigateur et suivre de cette façon si vous le souhaitez. Et, bien sûr, jeter un humain-vérifier si trop de sessions sont (re -) créé en succession (dans le cas où un bot continue de supprimer le cookie).

en ce qui concerne le fait d'attraper trop d'innocents, vous pouvez mettre en place un avertissement sur la page de vérification humaine: "cette page peut également apparaître si trop d'utilisateurs anonymes regardent notre site à partir du même endroit. Nous vous encourageons à vous inscrire ou se connecter pour éviter cela."(Modifier le libellé de façon appropriée.)

en outre, quelles sont les chances que les personnes X chargent la même page(s) en même temps à partir d'une IP? Si ils sont hauts, peut-être que vous avez besoin d'un mécanisme de déclenchement différent pour votre alarme bot.


Edit: une autre option est si elles échouent trop de fois, et vous avez confiance dans la demande du produit, pour les bloquer et les faire personnellement vous appeler pour enlever le bloc.

avoir des gens qui appellent semble une mesure asinine, mais il s'assure qu'il ya un humain quelque part derrière l'ordinateur . La clé est d'avoir le bloc ne doit être en place que pour une condition qui ne devrait presque jamais se produire à moins que ce ne soit un bot (par exemple échouer la vérification plusieurs fois d'affilée). Puis ça force l'interaction humaine - pour décrocher le téléphone.

en réponse au commentaire de les avoir fait m'appeler, il y a évidemment ce compromis ici. Êtes-vous suffisamment inquiet de vous assurer que vos utilisateurs sont humains pour accepter quelques appels téléphoniques quand ils vont en vente? Si j'étais si inquiète un produit arriver à des utilisateurs humains, j'aurais pour prendre cette décision, peut-être sacrifier un (petit) peu de mon temps dans le processus.

comme il semble que vous êtes déterminé à ne pas laisser les bots obtenir l'avantage / claquer votre site, je crois que le téléphone peut être une bonne option. Comme je ne tire aucun profit de votre produit, je n'ai aucun intérêt à recevoir ces appels. Si vous partagiez une partie de ce profit, cependant, je pourrais devenir intéressé. Comme c'est votre produit, vous devez décider combien vous vous souciez et de mettre en œuvre en conséquence.


les autres moyens de libérer le bloc ne sont tout simplement pas aussi efficaces: un temps d'arrêt (mais ils auraient à claquer votre site à nouveau après, rincer-répéter), un long délai d'arrêt (si c'était vraiment un humain essayant d'acheter votre produit, ils seraient SOL et punis pour avoir échoué le chèque), e-mail (facilement fait par les robots), fax (même), ou courrier d'Escargot (prend trop de temps).

vous pouvez, bien sûr, à la place, avoir la période d'attente augmentation par IP pour chaque fois qu'ils obtenir un délai d'attente. Assure-toi de ne pas punir les vrais humains par inadvertance.

223
répondu lc. 2009-02-09 00:50:52

vous devez trouver un moyen de faire les bots acheter des choses qui est massivement trop cher: 12mm wingnut: 20$. Voyez combien de bots se réveillent avant que les scénaristes décident que vous les jouez.

utilisez les profits pour acheter plus de serveurs et payer pour la bande passante.

190
répondu Christopher Mahan 2009-02-07 08:55:07

ma solution serait de rendre le screen-scraping sans valeur en mettant dans un délai d'environ 10 minutes pour ' bots et scripts.

Voici comment je ferais:

  • Journal et d'identifier toute répétez les frappeurs.

vous n'avez pas besoin d'enregistrer toutes les adresses IP sur chaque succès. Seulement de suivre tous les 20 hits. Un récidiviste se présentera quand même dans un dépistage occasionnel aléatoire.

  • gardez un cache de votre page d'environ 10 minutes plus tôt.

  • Lorsqu'un batteur/bot repeat-hitter accède à votre site, donnez-leur la page Mise en cache vieille de 10 minutes.

ils ne sauront pas immédiatement qu'ils ont un ancien site. Ils seront capables de le gratter, et tout, mais ils ne gagneront plus aucune course, parce que "real people" aura 10 minutes d'avance.

prestations:

  • pas de tracas ou de problèmes pour les utilisateurs (comme CAPTCHAs).
  • implémenté entièrement du côté serveur. (aucune confiance en Javascript/Flash)
  • servir une page plus ancienne et mise en cache devrait être moins exigeant en performance qu'une page en direct. Vous pouvez réellement réduire la charge sur vos serveurs de cette façon!

Inconvénients

  • nécessite le suivi de quelques adresses IP
  • nécessite de conserver et de maintenir un cache des pages plus anciennes.

Qu'en pensez-vous?

159
répondu abelenky 2009-02-07 20:42:10

regardez cet article de ned Batchelder ici . Son article est sur l'arrêt des spambots, mais les mêmes techniques pourraient facilement s'appliquer à votre site.

plutôt que d'arrêter les bots en ayant les gens s'identifient eux-mêmes, nous pouvons arrêter les bots en rendant difficile la pour eux de faire un poste réussi, ou en ayant par inadvertance identifier eux-mêmes comme des robots. Cela supprime le le fardeau des gens, et les feuilles le formulaire de commentaire sans anti-spam visible mesure.

cette technique est la façon dont je préviens les robots des spammeurs, sur ce site. Elle fonctionne. Le la méthode décrite ici ne regarde pas le contenu à tous.

quelques autres idées:

  • créer un officiel mécanisme de notification automatique (flux RSS? Twitter?) auquel les gens peuvent souscrire lorsque votre produit est en vente. Cela réduit le besoin pour les gens de faire des scripts.
  • Modifier votre technique d'obfuscation juste avant un nouvel élément est mis en vente. Donc, même si les scripteurs peuvent accélérer la course aux armements, ils sont toujours en retard d'un jour.

EDIT: pour être tout à fait clair, L'article de Ned ci-dessus décrire des méthodes pour empêcher l'achat automatisé d'articles en empêchant un BOT de passer par les formulaires pour valider une commande. Ses techniques ne seraient pas utiles pour empêcher les robots de screen-scraping la page d'accueil pour déterminer quand un Bandoleer de carottes vient à la vente. Je ne suis pas sûr qu'empêcher cela soit vraiment possible.

en ce qui concerne vos commentaires sur l'efficacité des stratégies de Ned: Oui, il parle de honeypots, mais je ne pense pas que ce soit sa stratégie la plus forte. Sa discussion du SPINNER est la raison originale j'ai mentionné son article. Désolé, Je ne l'ai pas fait plus clair dans mon post original:

Le spinner est un champ caché utilisé pour peu de choses: il hachages ensemble un nombre de valeurs qui empêchent falsification et replays, et est utilisé pour des noms de champs obscurs. Le spinner est un Du hachage MD5:

  • timestamp
  • l'adresse IP du client,
  • l'id d'entrée de l'entrée de blog étant commentée, et
  • un secret.

Voici comment vous pouvez mettre en œuvre que WOOT.com:

Changer le "secret" de la valeur qui est utilisée dans le cadre de la table de hachage chaque fois qu'un nouvel article est mis en vente. Cela signifie que si quelqu'un va concevoir un BOT pour auto-acheter des articles, il ne fonctionnerait jusqu'à ce que l'article suivant vient en vente !!

Même si quelqu'un est capable rapidement re-construire leur bot, tous les autres utilisateurs ont déjà acheté un BOC, et votre problème est résolu!

l'autre stratégie dont il parle est de changer la technique honeypot de temps en temps (encore, le changer quand un nouvel article va en vente):

  • utilisez les classes CSS (randomisées bien sûr) pour définir les champs OU un élément contenant à afficher:none.
  • Colorez les champs l'identique (ou très similaire à) le fond de la page.
  • utilisez le positionnement pour déplacer un champ hors de la zone visible de la page.
  • faire un élément trop petit pour montrer le champ de pot de miel contenu.
  • laisser les champs visibles, mais utiliser le positionnement pour les couvrir d'un élément obscurcissant.
  • Utiliser Javascript pour effet de ces changements, nécessitant un bot d'un moteur Javascript.
  • quittez les pots de miel affichés comme les autres champs, Mais dites aux gens de ne rien y entrer.

je suppose que mon idée générale est de changer la conception de la forme lorsque chaque nouvel article est mis en vente. Ou du moins, le changer quand un nouveau BOC est mis en vente.

C'est-à-dire quoi, deux fois par mois?

si vous acceptez cette réponse, me préviendrez-vous quand la prochaine est attendue? :)

54
répondu BradC 2009-02-10 01:40:07

Q: Comment empêcher les scripteurs de claquer votre site des centaines de fois par seconde?

R: Non. Il n'y a aucun moyen de prévenir ce comportement par des agents externes.

vous pourriez employer une vaste gamme de technologie pour analyser les demandes entrantes et tenter heuristiquement de déterminer qui est et qui n'est pas humain...mais il serait un échec. Éventuellement, si ce n'est immédiatement.

le seul viable à long terme la solution est de changer les règles du jeu alors que le site n'est pas de bot-friendly, ou est de moins en moins attractif pour les scripteurs.

Comment faites-vous cela? Eh bien, c'est une autre question! ;- )

...

OK, certaines options ont été données (et rejetées) ci-dessus. Je ne suis pas intimement familier avec votre site, après l'avoir regardé une seule fois, mais comme les gens peuvent lire le texte en images et les robots ne peuvent pas facilement le faire, changer la annonce être une image. pas un CAPTCHA , juste une image -

  • générer l'image (mise en cache bien sûr) lorsque la page est demandée
  • garder le nom de la source de l'image le même, de sorte que ne donne pas le jeu
  • la plupart du temps l'image du texte ordinaire, et d'aligner semblent faire partie de la ligne de la page HTML
  • quand le jeu est sur "on", le changements d'image dans le texte de l'annonce
  • le texte de l'annonce révèle une url et/ou un code qui doit être entré manuellement pour acquérir le prix. CAPTCHA le code si vous voulez, mais ce n'est probablement pas nécessaire.
  • pour plus de sécurité, le code peut être un jeton unique généré spécifiquement pour la requête/IP/agent, de sorte que les requêtes répétées génèrent des codes différents. Ou vous pouvez pré-générer un tas de codes aléatoires (un pad unique) si la production à la demande est trop exigeante.

moment de l'Exécution des essais de vraies personnes de répondre à cela, et ignorer ('oups, une erreur s'est produite, désolé! veuillez réessayer') réponses plus rapidement que (disons) la moitié de ce temps. Cet événement devrait également déclencher une alerte pour les développeurs qu'au moins un bot a compris le code/jeu, il est donc temps de changer le code/Jeu.

continuer à changer le jeu périodiquement de toute façon, même si aucun bots déclencher, il suffit de déchets, les scripteurs. Finalement les scripteurs devraient se lasser du jeu et aller ailleurs...nous espérons ;-)

une dernière suggestion: quand une requête pour votre page principale entre, mettez-la dans une file et répondez aux requêtes dans l'ordre dans un processus séparé (vous pouvez avoir à hacker/étendre le serveur web pour faire cela, mais cela vaudra probablement la peine). Si une autre requête provenant de la même adresse IP/du même mandataire est reçue alors que la première requête est la file d'attente, de l'ignorer. Cela devrait automatiquement décharger la charge des bots.

éditer: une autre option, en dehors de l'utilisation des images, est d'utiliser javascript pour remplir le texte acheter / ne pas acheter; bots interprètent rarement javascript, de sorte qu'ils ne le verraient pas

44
répondu Steven A. Lowe 2009-02-13 05:29:58

je ne sais pas comment est ce possible: ... passer à l'offensive.

Trouvez les données que les robots cherchent. Donnez - leur les données qu'ils cherchent quand vous ne vendez pas la merde. Faites ceci d'une manière qui ne dérangera pas ou ne troublera pas les utilisateurs humains. Quand les bots déclencheront la phase 2, ils se connecteront et rempliront le formulaire pour acheter des roombas à 100 $au lieu de BOC. Bien sûr, cela suppose que les bots ne sont pas particulièrement robuste.

un autre l'idée est de mettre en œuvre des baisses de prix aléatoires au cours de la période de vente sac o Merde. Qui achèterait un sac de merde pour 150 $alors que tu dis clairement qu'il ne vaut que 20$? Personne d'autre que des robots trop zélés. Mais 9 minutes plus tard, c'est 35 dollars ... puis 17 minutes plus tard, c'est 9$. Ou que ce soit.

bien sûr, les rois Zombies seraient capables de réagir. Le but est de rendre leurs erreurs très coûteuses pour eux (et de leur faire payer pour les combattre).

tout cela suppose que vous voulez énerver certains seigneurs bot, ce qui n'est peut-être pas conseillé à 100%.

29
répondu Zac Thompson 2009-02-08 02:01:44

donc le problème semble vraiment être: les bots veulent leur" sac 'o merde" parce qu'il a une haute valeur perçue à un faible prix perçu. Vous offrez parfois cet article et les bots rôdent, en attendant de voir si il est disponible, puis ils achètent l'article.

comme il semble que les propriétaires de bot font un profit (ou potentiellement faire un profit), le truc est de rendre cela non rentable pour eux en encourageant eux d'acheter la merde.

Première", 151930920" toujours offrir "un sac, o de la merde".

Deuxièmement, assurez-vous que cette merde est habituellement de la merde.

Troisièmement, tourner la merde fréquemment.

Simple, non?

vous aurez besoin d'un permanent " pourquoi notre merde est-elle parfois merdique?"lien à côté de l'offre d'expliquer aux humains ce qui se passe.

quand le bot voit qu'il y a de la merde et que la merde est automatiquement acheté, le destinataire va être terriblement contrarié qu'ils aient payé 10 $pour un cure-dent cassé. Et puis un vide-sac poubelle. Et de la terre du bas de votre chaussure.

S'ils achètent assez de cette merde dans un laps de temps relativement court (et vous avez de grands Avertissements partout expliquant pourquoi vous faites cela), ils vont perdre un juste" sac 'o argent "sur votre"sac 'o Merde". Même l'intervention humaine de leur part (contrôle pour s'assurer que la merde n'est pas de la merde) peut échouer si vous faites pivoter la merde assez souvent. Peut-être que les bots le remarqueront et n'achèteront rien de ce qui a été dans la rotation pendant trop peu de temps, mais ça veut dire que les humains achèteront le non-Merde.

diable, vos clients réguliers pourraient être si amusés que vous pouvez transformer cela en une victoire marketing énorme. Commencer à poster combien de la carpe" merde " est vendu. Les gens vont revenir pour voir juste comment dur les robots ont été mordu.

mise à Jour: je m'attends à ce que vous pourriez obtenir un peu d'appels à l'avant avec les gens de se plaindre. Je ne pense pas que tu puisses arrêter tout ça. Cependant, si cela tue les bots, vous pouvez toujours l'arrêter et le redémarrer plus tard.

21
répondu Ovid 2009-02-13 08:36:21
  1. vendez l'article à des humains non scripteurs.

  2. maintenir le site en marche à une vitesse qui n'est pas ralentie par les bots.

  3. ne harcelez pas les utilisateurs "normaux" avec des tâches à accomplir pour prouver qu'ils sont humains.

vous ne voulez probablement pas entendre cela, mais les numéros 1 et 3 sont mutuellement exclusifs.

On the Internet, nobody knows you're a dog

personne ne sait que tu es un robot. Il n'y a pas de façon programmatique de dire s'il y a ou non un humain à l'autre bout de la connexion sans exiger que la personne fasse quelque chose. Empêcher les scripts / bots de faire des choses sur le web est la raison pour laquelle les CAPTCHAs ont été inventés. Ce n'est pas comme ceci est un nouveau problème qui n'a pas vu beaucoup d'efforts ont été dépensés. Si il y avait une meilleure façon de le faire, une qui n'impliquait pas les tracas pour les vrais utilisateurs qu'un CAPTCHA fait, tout le monde l'utiliserait déjà.

je pense que vous devez faire face au fait que si vous voulez garder les bots hors de votre page de commande, un bon CAPTCHA est la seule façon de le faire. Si la demande pour vos conneries aléatoires est assez élevée que les gens sont prêts à aller à ces longueurs pour l'obtenir, les utilisateurs légitimes ne vont pas être rebutés par un CAPTCHA.

15
répondu Chris Upchurch 2017-02-08 14:10:09

la méthode utilisée par Woot pour combattre ce problème est en train de changer le jeu - littéralement. Quand ils présentent un article extraordinairement désirable à la vente, ils font jouer un jeu vidéo aux utilisateurs afin de le commander.

non seulement cela combat avec succès bots (ils peuvent facilement faire des changements mineurs au jeu pour éviter les joueurs automatiques, ou même fournir un nouveau jeu pour chaque vente), mais il donne également l'impression aux utilisateurs de "gagner" l'article désiré tout en ralentissant le processus de commande.

il se vend encore très rapidement, mais je pense que la solution est bonne - réévaluation du problème et la modification des paramètres a conduit à une stratégie réussie où les solutions strictement techniques n'existaient tout simplement pas.


tout votre modèle d'affaires est basé sur le " premier arrivé, premier servi."Vous ne pouvez pas faire ce que les stations de radio ont fait (ils ne font plus le premier appelant le gagnant, ils font le 5ème ou le 20ème ou 13 appelant le gagnant) - il ne correspond pas à votre fonction principale.

Non, il n'y a aucun moyen de le faire sans changer l'expérience de commande pour les utilisateurs réels.

disons que vous appliquez toutes ces tactiques. Si je décide que c'est important, je vais tout simplement obtenir 100 personnes pour travailler avec moi, nous allons construire un logiciel pour travailler sur nos 100 ordinateurs distincts, et frapper votre site 20 fois par seconde (5 secondes entre les accès pour chaque utilisateur / cookie / compte / IP adresse.)

vous avez deux étapes:

  1. regarder la une
  2. commander

vous ne pouvez pas mettre un captcha bloquant #1 - qui va perdre de vrais clients ("quoi? Je dois résoudre un captcha à chaque fois que je veux voir la dernière woot?!?").

donc mon petit groupe regarde, chronométré ensemble donc nous obtenons environ 20 chèques par seconde, et celui qui voit le changement en premier alerte tous les autres (automatiquement), qui chargeront à nouveau la page d'accueil, suivront le lien de commande, et effectueront la transaction (ce qui peut aussi se produire automatiquement, à moins que vous implémentiez captcha et que vous la modifiez pour chaque wootoff/boc).

vous pouvez mettre un captcha devant le #2, et bien que vous n'aimiez pas le faire, c'est peut-être la seule façon de vous assurer que même si les bots regardent la Une, les vrais utilisateurs reçoivent les produits.

mais même avec captcha mon petit groupe de 100 aurait quand même un avantage de premier arrivé - et il n'y a aucun moyen que vous puissiez dire que nous ne sommes pas des humains. Si tu commences à chronométrer nos accès, on ajouterait juste un peu de jitter. Nous pourrions choisir au hasard quel ordinateur devait se rafraîchir de sorte que l'ordre des accès change constamment - mais ressemble toujours assez à un humain.

d'abord, se débarrasser des bots simples

vous devez avoir un pare-feu adaptatif qui surveille les requêtes et si quelqu'un fait la chose stupide évidente - rafraîchissant plus d'une fois par seconde à la même IP puis employer des tactiques pour les ralentir (paquets de goutte, renvoyer refusé ou 500 erreurs, etc).

cela devrait réduire considérablement votre trafic et modifier les tactiques que les utilisateurs de bot emploient.

Deuxièmement, rendez le serveur extrêmement rapide.

tu ne veux vraiment pas entendre ça... mais...

je pense que ce dont vous avez besoin est un solution entièrement personnalisée à partir de la base.

vous n'avez pas besoin de jouer avec la pile TCP/IP, mais vous pouvez avoir besoin de développer un serveur personnalisé très, très, très rapide qui est conçu spécialement pour corréler les connexions des utilisateurs et réagir de manière appropriée aux diverses attaques.

Apache, lighthttpd, etc sont tous les grands pour être flexible, mais vous exécutez un site web à usage unique, et vous avez vraiment besoin d'être en mesure de faire à la fois plus que les serveurs actuels sont capables de faire (les deux en le trafic, et dans la lutte appropriée contre les bots).

en servant une page Web en grande partie statique (mises à jour toutes les 30 secondes environ) sur un serveur personnalisé, vous devriez non seulement être en mesure de gérer 10 fois le nombre de requêtes et le trafic (parce que le serveur ne fait rien d'autre que de recevoir la requête, et la lecture de la page de la mémoire dans le tampon TCP/IP), mais il vous donnera également accès à des mesures qui pourraient vous aider à ralentir bots. Par exemple, en corrélant la propriété intellectuelle adresses vous pouvez simplement bloquer plus d'une connexion par seconde par IP. Les humains ne peuvent pas aller plus vite que cela, et même les personnes qui utilisent la même adresse IP ne seront que rarement bloquées. Vous devriez faire un blocage lent - laisser la connexion tranquille une seconde entière avant de mettre fin officiellement à la session. Cela peut alimenter un pare-feu pour donner plus long terme blocs particulièrement flagrantes des délinquants.

Mais la réalité est que, peu importe ce que vous faites, il n'y a aucun moyen de distinguer un humain d'un bot quand le bot est fait sur mesure par un humain dans un seul but. Le bot est simplement une procuration pour l'humain.

Conclusion

à la fin de la journée, vous ne pouvez pas distinguer un humain et un ordinateur pour regarder la une. Vous pouvez arrêter les bots à l'étape de la commande, mais les utilisateurs de bot ont encore un avantage de premier déménageur, et vous avez encore une énorme charge à gérer.

vous pouvez ajouter des blocs pour le simple les robots, qui va élever la barre et moins de personnes à la peine avec elle. Qui peut être assez.

mais sans changer votre modèle de base, vous n'avez pas de chance. Le mieux que vous pouvez faire est de prendre soin des cas simples, faire le serveur si rapide utilisateurs réguliers ne remarquent pas, et vendre tant d'articles que même si vous avez quelques millions de bots, autant d'utilisateurs réguliers que vous voulez qu'ils les obtiendront.

vous pourriez envisager de configurer un pot de miel et de marquer les comptes d'utilisateur comme bot les utilisateurs, mais cela aura une énorme réaction négative de la communauté.

chaque fois que je pense à un "Eh bien, qu'en est-il de faire cela..."Je peux toujours contrer avec une stratégie bot appropriée.

même si vous faites de la page d'accueil un captcha pour se rendre à la page de commande ("le bouton de commande de cet article est bleu avec des paillettes roses, quelque part sur cette page") les bots vont simplement ouvrir TOUS les liens sur la page, et utiliser celui qui revient avec une page de commande. C'est simplement aucun moyen de gagner ce.

faire les serveurs rapide, mettre dans un reCaptcha (le seul que j'ai trouvé qui ne peut pas être facilement trompé, mais il est probablement beaucoup trop lent pour votre application) sur la page de commande, et de réfléchir aux moyens de changer le modèle légèrement afin que les utilisateurs réguliers ont une bonne chance que les utilisateurs bot.

- Adam

13
répondu Adam Davis 2011-11-16 22:14:45

Avertissement: Cette réponse est complètement non liée à la programmation. Il essaie, cependant, d'attaquer la raison des scripts en premier lieu.

une Autre idée est que si vous avez vraiment une quantité limitée de vendre, pourquoi ne pas changer de premier-arrivé-premier-servi méthodologie? Sauf si, bien sûr, le battage fait partie de votre plan de marketing.

il y a beaucoup d'autres options, et je suis sûr que d'autres peuvent penser à certaines différentes:

  • une file d'attente de commande (système de pré-commande) - certains scripts peuvent toujours se retrouver au début de la file d'attente, mais il est probablement plus rapide de simplement entrer l'information manuellement.

  • un système de tombola (chaque personne qui essaie d'en commander un est entré dans le système) - de cette façon les gens avec les scripts ont juste les mêmes chances que ceux sans.

  • une ruée vers file d'attente de priorité - Si il y a vraiment une haute valeur perçue, les gens peuvent être prêts à payer plus. Implémenter une file d'attente de commande, mais permettre aux gens de payer plus pour être placé plus haut dans la file d'attente.

  • vente aux enchères (le crédit va à David Schmitt pour celui - ci, les commentaires sont les miens) - Les gens peuvent toujours utiliser des scripts pour se faufiler à la dernière minute, mais non seulement cela change la structure des prix, les gens s'attendent à se battre avec d'autres. Vous pouvez aussi faire des choses pour limiter le nombre parmi les appels d'offres pour une période donnée, faites en sorte que les gens téléphonent à l'avance pour obtenir un code d'autorisation, etc.

11
répondu lc. 2009-01-16 16:38:44

peu importe à quel point les nazis pensaient que leurs communications étaient sûres, les Alliés brisaient souvent leurs messages. Peu importe comment vous essayez d'arrêter de robots à partir de votre site le bot propriétaires un moyen de contourner cela. Je suis désolé si cela fait de vous le Nazi: -)

je pense qu'un autre état d'esprit est nécessaire

  • N'essayez pas d'empêcher les bots d'utiliser votre site""
  • N'y allez pas pour un correctif qui fonctionne immédiatement, jouer le long jeu

entrez dans l'état d'esprit qu'il n'importe pas si le client de votre site est un humain ou un bot, les deux ne sont que des clients payants; mais l'un a un avantage injuste sur l'autre. Certains utilisateurs sans beaucoup de vie sociale (hermits) peut être tout aussi ennuyeux pour les autres utilisateurs de votre site que les bots.

Consignez l'heure à laquelle vous publiez une offre et l'heure à laquelle un compte choisit de l'acheter.

cela vous donne un enregistrement de la vitesse le client achète des trucs.

varier l'Heure de la journée vous publiez des offres.

par exemple, avoir une fenêtre de 3 heures à partir d'un moment obscur de la de la journée (minuit?) Que les robots et les hermites rafraîchira constamment une page pour 3 heures juste pour obtenir une commande à l'intérieur deuxième. Ne jamais varier l'Heure de base, seulement la taille de la fenêtre.

au Fil du temps une image apparaîtront.

01: Vous pouvez voir quels comptes achètent régulièrement des produits dans les secondes qui suivent leur mise en service. Suggérant qu'ils pourraient être des robots.

02: vous pouvez également regarder la fenêtre de temps utilisée pour les offres, si la fenêtre est d'une heure alors certains acheteurs tôt seront des humains. Un humain va rarement rafraîchir pendant 4 heures. Si le temps écoulé est assez constant entre publier/acheter quelle que soit la durée de la fenêtre alors c'est un bot. Si le temps de publication / achat est court pour les petites fenêtres et s'allonge pour les grandes fenêtres, c'est un ermite!

maintenant, au lieu d'empêcher les bots d'utiliser votre site, vous avez assez d'informations pour vous dire quels comptes sont certainement utilisés par les bots, et quels comptes sont susceptibles d'être utilisés par les ermites. Ce que vous faites avec cette information est à vous, mais vous pouvez certainement l'utiliser pour rendre votre site plus juste de les gens qui ont une vie.

je pense que bannir les comptes bot serait inutile, ce serait comme téléphoner à Hitler et lui dire " Merci pour les positions de vos U-boats!"D'une manière ou d'une autre, vous devez utiliser les informations d'une manière dont les propriétaires de compte ne se rendent pas compte. Voyons si je peux rêver quelque chose.....

traiter les commandes dans une file d'attente:

lorsque le client passe une commande, il obtient immédiatement un un e-mail de confirmation leur indiquant que leur commande est placée dans une file d'attente et sera notifié lorsqu'elle aura été traitée. Je fais l'expérience de ce genre de chose avec la commande/expédition sur Amazon et cela ne me dérange pas du tout, Je ne me dérange pas de recevoir un e-mail quelques jours plus tard me disant que ma commande a été expédiée aussi longtemps que je reçois immédiatement un e-mail me disant Qu'Amazon sait que je veux le livre. Dans votre cas, ce serait un email pour

  1. votre commande a été placée et se trouve dans un file.
  2. Votre commande a été traitée.
  3. Votre commande a été expédiée.

les utilisateurs pensent qu'ils sont dans une file d'attente juste. Traitez votre file d'attente toutes les 1 heure afin que les utilisateurs normaux aussi éprouver une file d'attente, afin de ne pas éveiller la suspicion. Ne traitez les commandes des comptes bot et hermit qu'une fois qu'elles sont dans la file d'attente pour le "temps de commande humain moyen + x heures". Réduction efficace des bots pour les humains.

11
répondu Peter Morris 2009-02-07 11:01:14

je dis exposer les informations de prix en utilisant une API. C'est la solution unintuitive, mais elle fonctionne pour vous donner le contrôle sur la situation. Ajouter quelques limitations à L'API pour le rendre un peu moins fonctionnel que le site web.

vous pouvez faire la même chose pour la commande. Vous pouvez expérimenter de petites modifications à la fonctionnalité/performance de L'API jusqu'à obtenir l'effet désiré.

il y a des procurations et des botnets pour contrer les vérifications IP. Y sont captcha lecture des scripts qui sont extrêmement bons. Il y a même des équipes de travailleurs en Inde qui battent captchas pour un petit prix. Toute solution que vous pouvez trouver peut être raisonnablement vaincue. Même les solutions de Ned Batchelder peuvent être dépassées en utilisant un contrôle WebBrowser ou un autre navigateur simulé combiné avec une liste de botnet ou de proxy.

10
répondu Robert Venables 2015-06-03 12:04:20

nous utilisons actuellement la dernière génération de balanciers BigIP load De F5 pour ce faire. Le BigIP possède des fonctionnalités avancées de gestion du trafic qui permettent d'identifier les racleurs et les bots en fonction de la fréquence et des modes d'utilisation, même parmi un ensemble de sources situées derrière une seule IP. Il peut ensuite les étrangler, leur fournir un contenu alternatif ou simplement les étiqueter avec des en-têtes ou des cookies afin que vous puissiez les identifier dans votre code d'application.

7
répondu ozy 2009-02-07 09:42:28

Que Diriez-vous d'introduire un délai qui nécessite une interaction humaine, comme une sorte de"jeu de CAPTCHA". Par exemple, il pourrait s'agir d'un petit jeu Flash où pendant 30 secondes, ils doivent éclater des boules à carreaux et éviter d'éclater balles solides (en évitant les problèmes de daltonisme!). Le jeu recevrait un numéro aléatoire et ce que le jeu transmet de nouveau au serveur serait les coordonnées et les horodateurs des points cliqués, ainsi que le seed utilisé.

sur le serveur vous simulez la mécanique du jeu en utilisant cette graine pour voir si les clics auraient effectivement fait éclater les boules. S'ils l'ont fait, non seulement ils étaient humains, mais ils ont pris 30 secondes pour se valider. Leur donner un id de session.

vous laissez cette session id faire ce qu'elle aime, mais si fait trop de demandes, ils ne peuvent pas continuer sans jouer à nouveau.

6
répondu Paul Dixon 2009-01-16 16:17:14

tout d'Abord, permettez-moi de récapituler ce que nous devons faire ici. Je sais que je ne fais que paraphraser la question initiale, mais il est important que nous soyons clairs à 100%, parce qu'il y a beaucoup de bonnes suggestions qui obtiennent 2 ou 3 sur 4, mais comme je vais le démontrer, vous aurez besoin d'une approche à multiples facettes pour couvrir toutes les exigences.

exigence 1: se débarrasser du "bot slamming":

La rapide-le-feu 'claquer' de votre page d'accueil est mal les performances de votre site et est au cœur du problème. Le "slamming" vient à la fois de bots IP simple et-soi - disant - de botnets ainsi. Nous voulons nous débarrasser de tous les deux.

exigence 2: ne gâchez pas l'expérience utilisateur:

nous pourrions corriger la situation bot assez efficacement en mettant en œuvre une procédure de vérification méchante comme téléphoner à un opérateur humain, résoudre un tas de CAPTCHAs, ou pareil, mais ce serait comme forcer tous les passagers innocents d'un avion à sauter à travers des cerceaux de sécurité juste pour avoir peu de chance d'attraper les terroristes les plus stupides. Oh attend - on fait ça en fait. Mais voyons si nous pouvons pas le faire sur woot.com.

exigence 3: Éviter la "course aux armements":

Comme vous le mentionnez, vous ne voulez pas être pris dans les spambot course aux armements. Donc vous ne pouvez pas utilisez des modifications simples comme des champs de forme cachés ou brouillés, des questions de mathématiques, etc., puisqu'il s'agit essentiellement de mesures d'obscurité qui peuvent être trivialement auto-détectées et contournées.

exigence 4:" bots D'alarme "de distorsion:

ce peut être le plus difficile de vos exigences. Même si nous pouvons faire un défi de vérification humaine efficace, les bots pourraient tout de même sonder votre page d'accueil et alerter le scripteur quand il y a une nouvelle offre. Nous voulons aussi rendre ces robots infaisables. C'est une version plus forte de la première exigence, car non seulement les bots ne peuvent pas émettre des requêtes à tir rapide qui nuisent aux performances, mais ils ne peuvent même pas émettre assez de requêtes répétées pour envoyer une "alarme" au scripteur à temps pour gagner l'offre.


Ok, donc voyons si nous pouvons répondre aux quatre exigences. Tout d'abord, comme je l'ai mentionné, aucune mesure ne fera l'affaire. Vous devrez combiner un couple

  1. un petit nombre d'utilisateurs devront sauter à travers des cerceaux
  2. Un petit nombre d'utilisateurs sera pas en mesure d'obtenir les offres spéciales

je sais que ce sont ennuyeux, mais si nous pouvons faire le "petit" nombre assez petit , j'espère que vous serez d'accord que les aspects positifs l'emportent sur les aspects négatifs.

première mesure: étranglement par l'utilisateur:

C'est un no-brainer, et je suis sûr que vous le faites déjà. Si un utilisateur est connecté, et continue à rafraîchir 600 fois par seconde (ou quelque chose comme ça), vous arrêtez de répondre et dites-lui de le rafraîchir. En fait, vous avez probablement étouffer ses requêtes beaucoup plus tôt que cela, mais vous avez l'idée. De cette façon, un bot connecté sera banni/étouffé dès qu'il commencera à sonder votre site. Ce est la partie facile. Les bots non authentifiés sont notre vrai problème, donc sur eux:

deuxième mesure: une certaine forme D'étranglement IP, comme suggéré par presque tout le monde:

quoi qu'il en soit, vous devrez faire certains accélérateur basé sur IP pour contrecarrer le "bot slamming". Depuis qu'il vous semble important de permettre aux visiteurs non authentifiés (non connectés) d'obtenir les offres spéciales, vous avez seulement IPs à passer initialement, et bien qu'ils ne soient pas parfaits, ils do travailler contre les bots IP simples. Les Botnets sont une autre bête, mais j'y reviendrai. Pour l'instant, nous allons faire quelques accélérations simples pour battre rapide-feu bots IP simple.

le hit de performance est négligeable si vous exécutez la vérification IP avant tout autre traitement, utilisez un serveur proxy pour la logique d'étouffement, et stockez les IPs dans un arbre de recherche memcached-optimisé structure.

troisième mesure: masquer la manette des gaz avec réponses cachées:

avec des bots mono-IP à tir rapide étranglés, nous devons encore nous occuper des bots mono-IP lents, c'est-à-dire: bots qui sont spécifiquement ajustés pour "voler sous le radar" par des demandes d'espacement légèrement plus espacés que la manette des gaz empêche.

pour rendre instantanément les robots mono-IP lents inutiles, il suffit d'utiliser la stratégie suggérée par abelenky: servir des pages cachées vieilles de 10 minutes à tous les IPs qui ont été repérés dans les dernières 24 heures (ou alors). De cette façon, chaque IP obtient une "chance" par jour/heure/semaine (en fonction de la période que vous choisissez), et il n'y aura pas d'ennui visible pour les utilisateurs réels qui frappent juste "recharge", sauf qu'ils ne gagnent pas l'offre.

la beauté de cette mesure est que c'est aussi contrecarre 'les bots d'alarme', tant qu'ils ne proviennent d'un botnet.

(je sais que vous le préféreriez probablement si les utilisateurs réels étaient autorisés à rafraîchir encore et encore, mais il n'y a aucun moyen de dire un rafraîchissement-spamming humain d'une demande-spamming bot à part sans CAPTCHA ou similaire)

quatrième mesure: reCAPTCHA:

vous avez raison que CAPTCHAs nuire à l'expérience de l'utilisateur et devrait être évitée. Toutefois, dans _one_ situation ils peuvent être votre meilleur ami: si vous avez conçu un système très restrictif pour déjouer bots, cela - en raison de son caractère restrictif - attrape également un certain nombre de faux positifs; alors un CAPTCHA servi comme dernier recours permettra à ces utilisateurs réels qui se font attraper à glisser par votre étranglement (évitant ainsi des situations DoS ennuyeux).

le point doux, bien sûr, est quand tous les bots sont pris dans votre filet, alors que très peu de vrais utilisateurs sont dérangés par le CAPTCHA.

si vous, en servant les 10-minutes vieilles pages cachées, offrent également une alternative, optionnel , CAPTCHA-vérifié 'rafraîchissement de la page d'accueil', alors les humains qui vraiment veulent garder rafraîchissant, peut encore le faire sans obtenir la vieille page cachée, mais au prix d'avoir à résoudre un CAPTCHA pour chaque rafraîchissement. Que est une gêne, mais un optionnel juste pour les utilisateurs intrépides, qui ont tendance à être plus indulgents parce qu'ils savoir ils jouent le système pour améliorer leurs chances, et que les chances améliorées ne viennent pas libre.

cinquième mesure: leurre crap:

Christopher Mahan avait une idée que j'ai plutôt aimé, mais je mettrais un tour différent. Chaque fois que vous êtes préparer une nouvelle offre, préparer deux autres "offres" ainsi, qu'aucun humain ne choisirait, comme une noix de 12mm pour 20$. Lorsque l'offre apparaît en première page, placez les trois "offres" dans la même image, avec les numéros correspondant à chaque offre. Lorsque l'utilisateur / bot passe effectivement à la commande de l'article, ils devront choisir (un bouton radio) qui offre qu'ils veulent, et puisque la plupart des bots serait simplement deviner, dans deux cas sur trois, les bots serait acheter des déchets sans valeur.

naturellement, cela ne concerne pas les 'bots d'alarme', et il ya une (mince) chance que quelqu'un pourrait construire un bot qui a été en mesure de choisir le bon article. Cependant, le risque d'acheter accidentellement de la camelote devrait faire tourner les scripteurs entièrement à partir des bots entièrement automatisés.

sixième mesure: étranglement de Botnet:

[supprimé]

OK............ J'ai maintenant j'ai passé la majeure partie de ma soirée à y réfléchir, essayant différentes approches.... mondial des retards.... biscuit à base de jetons.. en attente de servir... "stranger limitation".... Et il ne fonctionne tout simplement pas. Ça ne l'est pas. J'ai réalisé que la raison principale pour laquelle vous n'aviez pas encore accepté de réponse était que personne n'avait proposé un moyen de contrecarrer une attaque distribuée/zombie net/botnet.... donc, je voulais vraiment craquer. Je crois que j'ai résolu le problème de botnet pour l'authentification dans un thread différent , donc J'avais de grands espoirs pour votre problème ainsi. Mais mon approche ne se traduit pas. Vous n'avez que des adresses IP, et un botnet assez grand ne se révèle dans aucune analyse basée sur des adresses IP.

Donc voilà : ma sixième mesure est nulle. Rien. Zip. À moins que le botnet soit assez petit et / ou assez rapide pour être pris dans l'accélérateur IP habituel, Je ne vois pas n'importe quel mesure efficace contre les botnets qui n'impliquent pas de vérification humaine explicite comme les CAPTHAs. Je suis désolé, mais je pense que combiner les cinq mesures ci-dessus est votre meilleure chance. Et tu pourrais sûrement t'en sortir avec le truc de 10 minutes de cache d'abelenky tout seul.

6
répondu Jens Roland 2017-05-23 12:18:15

il y a quelques autres / meilleures solutions déjà publiées, mais pour être complet, j'ai pensé que je mentionnerais ceci:

si votre principale préoccupation est la dégradation des performances, et que vous êtes en train de regarder le vrai martelant , alors vous avez réellement affaire à une attaque DoS, et vous devriez probablement essayer de la gérer en conséquence. Une approche courante consiste simplement à laisser tomber les paquets d'une IP dans le pare-feu après un certain nombre de connexions par seconde/minute/etc. Pour par exemple, le pare-feu Linux standard, iptables, A une fonction standard de correspondance des opérations "hashlimit", qui peut être utilisée pour corréler les requêtes de connexion par unité de temps à une adresse IP.

bien que, cette question serait probablement plus appropriée pour le prochain so-derivate mentionné sur le dernier SO-podcast, Il n'a pas encore lancé, donc je suppose qu'il est correct de répondre:)

EDIT:

Comme l'a souligné novatrust, il y a encore des FSI qui n'assignent pas de Pi à leurs clients, de sorte qu'effectivement, un client de script d'un tel FSI pourrait désactiver tous les clients de ce FSI.

5
répondu roe 2009-01-16 16:28:38

écrivez un mandataire inversé sur un serveur apache devant votre application qui implémente un Tarpit (article Wikipedia) pour punir les bots. Il gérerait simplement une liste d'adresses IP connectées au cours des dernières secondes. Vous détectez une rafale de requêtes à partir d'une seule adresse IP et retardez ces requêtes de façon exponentielle avant de répondre.

bien sûr, plusieurs humains peuvent venir de la même adresse IP s'ils sont sur un réseau NAT'd connexion mais il est peu probable qu'un humain se soucie de votre temps de réponse allant de 2mS à 4MS (ou même 400mS) alors qu'un bot sera gêné par le retard croissant assez rapidement.

5
répondu Denis Hennessy 2009-02-08 01:45:49
  1. fournissent un flux RSS afin qu'ils ne manger votre bande passante.
  2. lors de l'achat, faites attendre tout le monde un aléatoire durée jusqu'à 45 secondes ou quelque chose, selon ce que vous êtes à la recherche d'exactement. Exactement quelles sont vos contraintes temporelles?
  3. donner à chacun 1 minute pour mettre son nom pour le dessin et puis sélectionner au hasard les gens. Je pense que c'est le moyen le plus juste.
  4. Surveiller les comptes (inclure quelques fois dans la session et le stocker?) et ajouter des retards aux comptes qui semblent être en dessous du seuil de vitesse humaine. Cela permettra au moins aux robots d'être programmés pour ralentir et rivaliser avec les humains.
4
répondu Joe Philllips 2009-01-16 16:48:23

tout d'abord, par définition, il est impossible de soutenir des transactions apatrides, c'est-à-dire véritablement anonymes, tout en étant capable de séparer les bots des utilisateurs légitimes.

Si nous pouvons accepter l'hypothèse selon laquelle nous pouvons imposer des frais flambant neuf woot visiteur sur sa première page hit(s), je pense avoir une solution possible. Faute d'un meilleur nom, je vais appeler cette solution "une visite à la DMV."

disons que Il ya un concessionnaire de voiture qui offre une nouvelle voiture chaque jour, et que certains jours, vous pouvez acheter une voiture de sport exotique pour 5 $chacun (limite 3), plus un frais de destination de 5$.

le hic est, la concession exige que vous visitez la concession et montrer un permis de conduire valide avant que vous êtes autorisé à entrer par la porte pour voir ce que la voiture est en vente. En outre, vous devez avoir dit permis de conduire valide afin de procéder à l'achat.

donc, le premier visiteur (appelons-le Bob) à ce Concessionnaire automobile est refusé d'entrée, et est référée au bureau de la DMV (qui est commodément situé juste à côté) pour obtenir un permis de conduire.

les autres visiteurs titulaires d'un permis de conduire valide sont autorisés à entrer, après avoir présenté leur permis de conduire. Une personne qui fait une nuisance de lui-même en flânant autour toute la journée, harcelant les vendeurs, en attrapant des brochures, et en vidant le café gratuit et les cookies sera éventuellement détourner.

maintenant, Retour à Bob sans la licence -- Tout ce qu'il a à faire est de supporter la visite au DMV une fois. Après cela, il peut visiter la concession et acheter des voitures quand il veut, sauf s'il a accidentellement laissé son portefeuille à la maison, ou son permis est autrement détruit ou révoqué.

Le permis de conduire dans ce monde est presque impossible à falsifier.

la visite à la DMV implique d'abord d'obtenir le formulaire de demande à la File d'attente" commencez ici". Bob doit apporter la demande remplie à la fenêtre #1, où le premier des nombreux fonctionnaires maussades prendra sa demande, la traiter, et si tout est en ordre, tamponner la demande pour la fenêtre et l'Envoyer à la fenêtre suivante. Bob va donc de fenêtre en fenêtre, attendant que chaque étape de sa demande soit franchie, jusqu'à ce qu'il arrive finalement à la fin et reçoive sa licence de conduite.

il n'y a pas de raison d'essayer de " court circuit " le DMV. Si les formulaires ne sont pas remplis correctement en trois exemplaires, ou si des réponses erronées sont données à n'importe quelle fenêtre, la demande est déchirée, et le client malheureux est renvoyé au début.

fait Intéressant, n'importe comment plein ou vide du bureau, il prend environ la même quantité de temps pour obtenir desservies à chaque fenêtre. Même lorsque vous êtes la seule personne en ligne, il semble que le personnel aime vous faire attendre une minute derrière la ligne jaune avant prononce, "à la Prochaine!"

les choses ne sont pas si terribles à la DMV, cependant. Pendant que tout l'attente et le traitement pour obtenir la licence est en cours, vous pouvez regarder une infopublicité très divertissante et informative pour le concessionnaire de voiture alors que vous êtes dans le hall DMV. En fait, l'infomérique fonctionne juste assez longtemps pour couvrir la quantité de temps que vous passez à obtenir votre licence.

l'explication un peu plus technique:

comme je l'ai dit au sommet, il devient nécessaire d'avoir une certaine stateishness sur la relation client-serveur qui vous permet de séparer les humains des bots. Vous voulez le faire d'une manière qui ne pénalise pas exagérément le visiteur humain anonyme (non-authentifié).

cette approche nécessite probablement un traitement AJAX-y côté client. Un tout nouveau visiteur à woot reçoit le " Welcome New User!"page pleine de texte et de graphiques qui (par l'étranglement côté serveur approprié) prend quelques secondes pour charger complètement. Pendant que cela se produit (et que le visiteur est probablement occupé à lire la(Les) page (s) d'accueil), son jeton d'identification est lentement assemblé.

disons, pour discussion, le jeton (alias "permis de conduire) se compose de 20 morceaux. Pour obtenir chaque morceau successif, le code côté client doit soumettre une requête valide au serveur. Le serveur incorpore un délai délibéré (disons 200 millisecondes), avant d'envoyer le prochain morceau le long avec le "timbre" nécessaire pour faire la prochaine demande de morceau (i.e., les timbres nécessaires pour passer d'une fenêtre de DMV à la suivante). En tout, environ 4 secondes doivent s'écouler pour terminer le bloc-challenge-réponse-chunk-défi-réponse...-chunk-challenge-réponse-l'achèvement du processus.

À la fin de ce processus, le visiteur dispose d'un jeton qui lui permet d'aller à la page de description du produit et, à son tour, allez à la page d'achat. Le token est un ID unique pour chaque visiteur, et peut être utilisé pour ralentir ses activités.

du côté du serveur, vous n'acceptez que les vues de page des clients qui ont un token valide. Ou, s'il est important que tout le monde puisse finalement voir la page, mettez une pénalité de temps sur les requêtes qui manquent un jeton valide.

maintenant, pour que ce soit relativement bénin pour le visiteur humain légitime,faire le processus de délivrance de jeton se produire relativement non-intrusive dans l'arrière-plan. D'où la nécessité pour la page d'accueil avec divertissant copie et de graphiques qui est délibérément ralenti légèrement.

cette approche oblige un accélérateur de bots à utiliser un jeton existant, ou à prendre le temps minimum de configuration pour obtenir un nouveau jeton. Bien sûr, cela n'aide pas autant contre les attaques sophistiquées en utilisant un réseau distribué de faux visiteurs.

4
répondu Toybuilder 2009-02-07 10:15:48

vous ne pouvez pas totalement prévenir les bots, même avec un captcha. Cependant, vous pouvez faire une douleur d'écrire et de maintenir un bot et donc réduire le nombre. En particulier en les forçant à mettre à jour leurs bots quotidiennement, vous serez la cause de la plupart de perdre intérêt.

voici quelques idées pour rendre plus difficile d'écrire des bots:

  • nécessitent l'exécution d'une fonction javascript. Le Javascript rend l'écriture d'un bot beaucoup plus pénible. Peut-être avoir besoin d'un captcha s'ils n'exécutent pas javascript pour permettre tout de même les utilisateurs réels non-javascript (minimal).

  • chronométrez les frappes lorsque vous tapez dans le formulaire (encore une fois par javascript). Si ce n'est pas l'homme comme il faut la rejeter. C'est une douleur d'imiter le typage humain dans un robot.

  • écrivez votre code pour mettre à jour votre ID de champ quotidiennement avec une nouvelle valeur aléatoire. Cela les forcera à mettre à jour leur bot quotidien qui est un douleur.

  • écrivez votre code pour ré-ordonner vos champs sur une base quotidienne (évidemment d'une certaine façon ce n'est pas aléatoire pour vos utilisateurs). S'ils comptent sur l'ordre de mission, cela les fera monter et forcera la maintenance quotidienne à leur code bot.

  • vous pouvez aller encore plus loin et utiliser le contenu Flash. Flash est totalement une douleur d'écrire un bot contre.

Généralement, si vous commencez à prendre un État d'esprit de ne pas les empêcher, mais faire plus de travail pour eux, vous pouvez probablement atteindre le but que vous recherchez.

4
répondu jwanagel 2009-02-07 18:15:57

Bâton un délai de 5 minutes sur toutes les annonces de produits pour les utilisateurs non enregistrés. Les utilisateurs occasionnels ne le remarqueront pas vraiment et les utilisateurs non-occasionnels seront enregistrés de toute façon.

4
répondu Brian 2009-02-09 14:43:47

Je ne vois pas le grand fardeau que vous réclamez de la vérification IPS entrants. Au contraire, j'ai fait un projet pour un de mes clients qui analyse les logs D'accès HTTP toutes les cinq minutes (cela aurait pu être en temps réel, mais il ne voulait pas que pour une raison que je n'ai jamais pleinement compris) et crée des règles de pare-feu pour bloquer les connexions à partir d'adresses IP qui génèrent un nombre excessif de requêtes sauf si l'adresse peut être confirmée comme appartenant à une recherche légitime moteur (google, yahoo,etc.).

ce client gère un service d'hébergement web et exécute cette application sur trois serveurs qui traitent un total de 800-900 domaines. L'activité de pointe est de l'ordre du millier de coups par seconde et il n'y a jamais eu de problème de performance-les pare-feu sont très efficaces pour larguer des paquets à partir d'adresses figurant sur la liste noire.

et, oui, la technologie DDOS existe bel et bien, ce qui irait à l'encontre de ce schéma, mais il ne voit pas que arriver dans le monde réel. Au contraire, il dit que c'est considérablement réduit la charge sur ses serveurs.

3
répondu Dave Sherohman 2009-01-16 17:13:35

mon approche serait de me concentrer sur des solutions non technologiques (sinon, vous entrez dans une course aux armements que vous perdrez, ou au moins dépenser beaucoup de temps et d'argent sur). Je me concentrerais sur les pièces de facturation / expédition - vous pouvez trouver des bots soit en trouvant des livraisons multiples à la même adresse ou par des frais multiples à une méthode de paiement unique. Vous pouvez même le faire à travers les éléments sur plusieurs semaines, donc si un utilisateur a obtenu un élément précédent (en répondant vraiment très rapidement) il peut être assigné une sorte de "handicap", cette fois.

cela aurait aussi un effet secondaire (bénéfique, je pense, mais je pourrais me tromper marketing-Sage pour votre cas) de peut-être élargir le cercle des gens qui obtiennent la chance et obtenir d'acheter woot.

3
répondu Shachar 2009-02-07 09:49:29

la plupart des solutions purement techniques ont déjà été proposées. Je vais donc proposer une autre vision du problème.

D'après ce que j'ai compris, les bots sont montés par des gens sincèrement essayant d'acheter les sacs que vous vendez. Le problème, c'est

  1. D'autres personnes, qui n'exploitent pas de bots, méritent une chance d'acheter, et vous offrez une quantité limitée de sacs.
  2. vous voulez attirer les humains à votre site et vendre les sacs.

au lieu d'essayer d'éviter les bots, vous pouvez permettre aux acheteurs potentiels de sac à s'abonner à un e-mail, ou même mise à jour SMS, pour être avisé quand une vente aura lieu. Vous pouvez même leur donner une minute ou deux d'avance (une URL spéciale où la vente commence, générée au hasard, et envoyée avec le courrier/SMS).

quand ces acheteurs vont acheter ils sont dans vous êtes site, vous pouvez leur montrer tout ce que vous voulez à côté des bannières ou quoi que ce soit. Ceux qui exécutent les bots préféreront simplement s'inscrire à votre service de notification.

les coureurs des bots pourraient encore courir des bots sur votre notification pour terminer l'achat plus rapidement. Certaines solutions peuvent être d'offrir un achat en un clic.

soit dit en passant, vous avez mentionné que vos utilisateurs ne sont pas enregistrés, mais il semble que ceux qui achètent ces sacs ne sont pas des acheteurs au hasard, mais des gens qui attendent avec impatience ces ventes. En tant que tel, ils pourraient être disposés pour vous inscrire pour obtenir un avantage en essayant de "gagner" un sac.

En substance ce que je suggère, c'est d'essayer et de regarder le problème comme un problème social, plutôt que technique.

Asaf

3
répondu Asaf R 2009-02-07 22:18:26

le Temps de bloquer les agents utilisateurs qui font autant de demandes par minute. Par exemple, si vous avez quelqu'un qui demande une page exactement toutes les 5 secondes pendant 10 minutes, ce n'est probablement pas un utilisateur... Mais ça pourrait être délicat de faire ça bien.

s'ils déclenchent une alerte, redirigez chaque requête vers une page statique avec le moins de DB-IO possible avec un message leur faisant savoir qu'ils seront autorisés à revenir en fonction dans X minutes.

Il est important d'ajouter que vous devriez probablement ne l'appliquer que sur les requêtes de pages et Ignorer toutes les requêtes de médias (js, images, etc.).

2
répondu Oli 2009-01-16 16:12:39

empêcher DoS serait la défaite #2 des objectifs de @davebug il a souligné ci-dessus, "garder le site à une vitesse non ralentie par les bots" mais ne serait pas nécessaire résoudre # 1, "vendre l'article à des humains non-scripting"

je suis sûr qu'un scripteur pourrait écrire quelque chose pour patiner juste sous la limite excessive qui serait encore plus rapide qu'un humain pourrait passer par les formulaires de commande.

2
répondu Shawn Miller 2009-01-16 17:35:33

donc les spammeurs sont en compétition avec les gens ordinaires pour gagner la vente aux enchères" bog of crap"? Pourquoi ne pas faire de la prochaine vente aux enchères un "sac de merde"littéral? Les polluposteurs paient cher pour un sac plein de cacahuètes, et on se moque tous d'eux.

2
répondu 1800 INFORMATION 2009-02-07 07:52:14

l'important ici est de changer le système pour supprimer la charge de votre serveur, empêcher les bots de gagner le sac de merde sans laisser les botlords savoir que vous les jouez ou ils vont réviser leur stratégie. Je ne pense pas qu'il y ait moyen de le faire sans un traitement de votre part.

donc vous enregistrez les visites sur votre page d'accueil. Chaque fois que quelqu'un atteint la page que la connexion est comparée à son dernier succès, et si elle était trop rapide alors il est envoyé une version de la page sans l'offre. Cela peut être fait par une sorte de mécanisme d'équilibrage de charge qui envoie des bots (les hits qui sont trop rapides) à un serveur qui sert simplement des versions cachées de votre page d'accueil; les personnes réelles sont envoyées au bon serveur. Cela décharge la charge du serveur principal et fait penser aux bots qu'ils sont toujours servis correctement.

Encore mieux si l'offre peut être diminué d'une certaine façon. Alors vous pouvez encore faire les offres sur le faux serveur mais quand le bot rempli le formulaire dire "Désolé, vous n'étiez pas assez rapide" :) alors ils vont certainement penser qu'ils sont toujours dans le jeu.

2
répondu Chris Latta 2009-02-07 11:19:37

Comment savez-vous qu'il y a des scripteurs qui passent des commandes?

le nœud de votre problème est que vous ne pouvez pas séparer les scripteurs des utilisateurs légitimes et donc ne pouvez pas les bloquer, alors comment savez-vous qu'il y a des scripteurs?

Si vous avez un moyen de répondre à cette question, alors vous avez un ensemble de caractéristiques que vous pouvez utiliser pour filtrer les scripteurs.

2
répondu Bret Walker 2009-02-11 13:21:07

tournons le problème sur sa tête - vous avez des bots acheter des choses que vous voulez que les gens réels acheter, Que diriez-vous de faire une réelle chance que les bots acheter des choses que vous ne veulent que les gens réels acheter.

ont une chance aléatoire pour un html non affiché que les robots de grattage penseront être la situation réelle, mais les vraies personnes ne verront pas (et n'oubliez pas que les vraies personnes incluent les aveugles, donc considérez les lecteurs d'écran etc aussi bien), et cela va jusqu'à acheter quelque chose d'exorbitant cher (ou ne fait pas l'achat réel, mais obtient des détails de paiement pour vous de mettre sur une banlist).

même si les bots passent à "alerter l'utilisateur" plutôt que "faire l'achat", si vous pouvez obtenir assez de fausses alarmes, vous pouvez être en mesure de le rendre suffisamment sans valeur pour les gens (peut-être pas tout le monde, mais une certaine réduction dans l'arnaque est mieux que rien du tout) de ne pas se soucier.

2
répondu Cebjyre 2009-02-13 00:01:52