Comment détecter et prévenir les abus (mise en bouteille) des API de jeux en ligne?

50

Je travaille occasionnellement sur une idée de jeu pendant mon temps libre. Le gameplay et le contenu rendent ce jeu réalisable en tant que jeu multijoueur en ligne construit avec des technologies Web bien établies. Vous devez savoir que cela entre dans le genre de la stratégie et de la simulation. Cela signifie: Pas de parcours avec des personnages ou des actions similaires mais seulement des actions atomiques (concernant la communication client-serveur) comme "construire l'objet A sur l'emplacement X".

À un moment donné, j'ai réalisé qu'il y avait un énorme problème: avoir un front-end basé sur un navigateur s'appuyant sur une API REST en fait une cible plus qu'excellente pour les bots. Bien que l’automatisation soit souhaitable pour les entreprises, elle est un poison pour un jeu amusant. Je l'ai expérimenté de première main dans un jeu sur navigateur dans le passé où les joueurs les plus réussis étaient des bots qui soumettaient tout le monde.

De mon point de vue actuel, je ne vois aucune possibilité de protection contre les robots lors de la création d'un jeu multijoueur en ligne basé sur une API REST. Exception: le rendre open source pour que tout le monde puisse héberger sa propre instance pour des groupes privés ou même lui-même (pour ne pas être ennuyé par des saccades avec des bots).

Existe-t-il un moyen de différencier un joueur honnête qui vient de définir une alarme pour la prochaine action possible et un bot qui prend automatiquement toutes les chances de le voir apparaître? En plus de tels spectacles comme des captchas. Sinon, je penserais à une autre pile technologique qui rend au moins beaucoup plus difficile de gâcher la communication client-serveur (protocole propriétaire binaire crypté dans un client à code natif).

Edit : Merci, vos réponses sont inspirantes, mais m'ont aussi fait comprendre que des contre-mesures spécifiques ne peuvent pas être prises en approfondissant les détails du jeu. Cependant, ce serait trop pour une question sur Stack Exchange. Je tiens donc simplement à souligner les points les plus importants:

  • Les joueurs explorent, développent et gèrent quand ils le souhaitent. Leurs entreprises fonctionnent toujours bien lorsqu'elles sont hors ligne (c'est un jeu pacifique, aucune arme impliquée). Seules l'expansion et le progrès nécessitent l'action des joueurs. Ces actions sont limitées par:
  • le temps est l’une des ressources clés (comme dans le cadre de la formation aux compétences d’EVE Online). Tous les processus en jeu en ont besoin. Il ne sert à rien d'être en ligne 24h / 24 et 7j / 7. Le joueur moyen devrait réussir déjà avec ne pas dépenser plus d'une heure chaque jour dans une ou deux séances ( à peu près , le concept est encore en développement).
Peter
la source
9
Ne pouvez-vous pas créer le jeu de telle sorte que d’autres programmant ou achetant des robots ne gâchent pas le plaisir des joueurs humains? Et deuxièmement, programmer un bot / IA pour jouer à un jeu peut être amusant en soi; cela ne devrait cependant pas gâcher le plaisir des autres.
Kasper van den Berg le
27
"L'automatisation [...] est un poison pour un jeu amusant." Fortement en désaccord. Si votre jeu est vraiment amusant, pourquoi pénaliser les joueurs pour sauter des parties où ils n'en ont pas? Si les éléments de votre jeu sont si fastidieux que les joueurs préfèrent ne pas jouer et ressentent le désir de voir un script prendre le relais, c'est le véritable problème à résoudre.
Marcks Thomas
6
Votre exemple a une réponse simple: donnez au joueur les outils nécessaires pour qu'il n'ait pas besoin d' un bot. Par exemple, laissez-les faire la queue pour une action plutôt que de les encourager à être en ligne à un moment précis ou obtenez / créez un outil pour le faire à leur place.
4
La principale raison pour laquelle les gens utilisent des bots est parce que certaines parties du jeu sont fastidieuses et ennuyeuses pour eux (s'ils étaient amusants, ils les joueraient simplement). Il est clair que vos joueurs apprécient la compétition et les défis, mais pas le gameplay automatisable. Vous pouvez essayer de modifier la conception du jeu pour supprimer les éléments que les utilisateurs utilisent pour récupérer, ou de rééquilibrer votre jeu pour créer des décisions plus difficiles et significatives que seul un joueur humain peut prendre et qu'un bot ne peut pas (comme des choix stratégiques profonds). . Sinon, vous serez condamné à une course aux armements et les botteurs gagneront.
Superbest
6
tl; dr: Les gens n'aimeront pas rivaliser avec le mec avec une alarme et pas de travail, pas plus que contre le mec avec un bot - et c'est ce qui va les pousser à lancer des bots.
Random832

Réponses:

51

Si les gens veulent botter, je ne pense pas que vous puissiez vraiment les arrêter.

Vous pouvez bien entendu mettre en œuvre de nombreuses mesures qui rendent la mise en bouteille plus ou moins pénible. Mais vous ne pouvez faire que tant de choses avant que votre code ne devienne un gigantesque gâchis difficile à entretenir, sujet aux erreurs et gênant les utilisateurs légitimes. En attendant, les botteurs trouveront toujours le moyen de vaincre vos contre-mesures:

  • Il y en a plus que toi
  • Ils ont plus de temps libre (vous devez diviser le temps entre le développement réel et la vérification des bogues, ils peuvent pirater leur code de bots toute la journée)
  • Lorsque vous créez des sauvegardes extravagantes et difficiles, les auteurs de bot seront encouragés car il est amusant de casser la protection de votre bot
  • S'il y a un marché noir de personnes qui tirent des profits commerciaux de bots, plus vous aurez du mal à écrire un bot, plus les bots de travail auront de la valeur, alors vous inciterez le botting

Vous serez fondamentalement pris au piège dans une course aux armements avec les botteurs, et basé sur une logique allant dans le sens des points ci-dessus, ainsi que sur mon expérience avec de tels jeux, vous ne pourrez pas suivre le rythme.

Certains développeurs de jeux utilisent des mesures anti-triche extrêmement agressives: par exemple, Steam analysera la mémoire et le système de fichiers pour rechercher des piratages, et les contrevenants pourraient être punis par la perte de comptes valant des centaines de dollars. Pourtant, il y a encore des robots et d'autres hacks pour les jeux Steam, et certains d'entre eux travaillent même la moitié du temps. Contrairement à eux, vous avez une API largement ouverte à l'utilisateur, sans aucun contrôle sur l'ordinateur de l'utilisateur. C'est une bataille difficile depuis le début.

Le problème que vous essayez de résoudre est essentiellement un test de Turing: sauf qu'il s'agit d'un test de Turing très facile, car vous ne pouvez pas tricher en exigeant des problèmes d'intelligence artificielle tels que la langue. Peu importe le nombre d'heuristiques que vous créez, il serait trivial pour un botter d'ajouter un peu de hasard à l'action du bot pour qu'il imite presque exactement un humain. Il ne serait même pas très difficile que le bot vous regarde un peu, et apprenne à chronométrer des actions exactement comme vous. Ensuite, lorsque vous bannissez le bot, le botter publie une énorme énonciation sur le forum, expliquant qu'il n'est qu'un joueur dévoué (et qu'il est peut-être un faux positif) et que votre public cible de joueurs hardcore se soulèvera contre vous.

Rendre le jeu trop amusant pour bot

La principale raison pour laquelle un utilisateur utilise un bot est qu’il souhaite ignorer une partie du jeu. S'ils appréciaient le jeu et le trouvaient amusant, ils ne le laisseraient pas jouer par le bot, ils le joueraient eux-mêmes.

Mais si le jeu est si ennuyeux, pourquoi le jouer du tout? Vraisemblablement, certaines parties du jeu sont ennuyeuses et obligatoires pour accéder à des parties amusantes. Par exemple, dans les MMO, tout le monde aime monter de niveau, mais personne ne veut tuer 42 324 rats empoisonnés mort-vivants pour obtenir le XP. Alors, ils laissent le bot jouer et viennent jouer le rôle amusant.

Ce n'est pas une critique de vous ou de votre jeu, mais clairement, au moins certains joueurs trouvent certaines parties de votre jeu fastidieuses. Vous devriez voir si vous pouvez réduire ces parties fastidieuses et envisager de prendre des décisions plus difficiles et plus significatives: les robots ne sont pas doués pour la stratégie en profondeur ou la pensée latérale par rapport à l'intelligence humaine et, en plus, les humains aiment prendre des décisions difficiles en matière de jeu.

D'après votre description, j'ai l'impression qu'il s'agit d'un jeu par navigateur similaire à Travian, où il existe une file d'attente de construction avec un seul ordre de construction unique et certaines tâches de "maintenance" (telles que la poursuite des raids agricoles) qui doivent être effectuées. Vous dites qu'il n'y a pas de conflit, mais dans tout drame MMO et toute politique mesquine est inévitable (l'OMI c'est l'attraction principale), je suis sûr que vos joueurs trouveront le moyen de se prendre la tête. Avec ces sortes de jeux, l'ennui provient en grande partie de ces tâches de «maintenance» - ce que les joueurs veulent vraiment faire est de faire des alliances et de jouer le jeu de la diplomatie avec des clans rivaux, la maintenance devient alors une sorte de taxe où il faut se réveiller jusqu’à une alarme aux heures impaires pour pouvoir entrer dans cette partie diplomatique amusante. Alors coupez l'ennui:

Cette approche peut ne pas toujours fonctionner, malheureusement. Tous les joueurs n’ont pas la même tolérance à l’ennui ou le même concept de plaisir. Vous pourriez avoir un mécanicien de premier plan que 99% de vos joueurs apprécient, mais le 1% le trouve ennuyeux. Et si le 1% commençait alors à écrire des bots, ruinant le plaisir pour le 99%? Mais finalement, c'est une question de degré. Vous ne pouvez jamais supprimer complètement la mise en bouteille, mais vous pouvez minimiser les dégâts.

Bouteilles Undercut

Une grande partie des effets vraiment négatifs des bots provient des auteurs qui commercialisent leurs travaux. Si tel est le cas pour vous, vous pouvez simplement rivaliser avec les robots. De nombreux jeux en ligne basés sur le temps réel possèdent déjà des fonctionnalités haut de gamme permettant le saut de temps et l'automatisation (telles que les files d'attente de construction étendues). Cela équivaut à un bot officiel sanctionné par le développeur. Si vous en avez et que vous leur attribuez un prix approprié, les joueurs achèteront votre prime au lieu d’acheter des robots. La bonne nouvelle est que vous êtes en charge de l'API. Vous disposez donc toujours d'un avantage considérable pour développer une automatisation de qualité pour votre propre jeu. Cette fois, c'est une bataille perdue pour les botteurs.

Cela n'éliminera pas les botteurs amateurs ou les personnes qui estiment que votre prime n'est pas d'un bon rapport qualité-prix. L'efficacité de cette approche dépend donc à nouveau de la situation.

Les chercher manuellement

Comme je l'ai dit ci-dessus, ce que vous faites est essentiellement un test de Turing. Étant donné que l’interaction avec les humains est considérée comme un défi difficile au test de Turing, vous pouvez en tirer parti.

Inspectez manuellement les joueurs de haut niveau et voyez si vous trouvez quelque chose de suspect. Vous pourrez peut-être même vous en sortir en les sondant de temps en temps d'une manière limitée à votre imagination, pour voir si vous pouvez tromper le bot pour qu'il fasse quelque chose qu'il ne ferait pas.

Bien qu’il soit difficile d’écrire un algorithme détectant les bots de manière fiable, il n’est pas si difficile pour un humain d’apprendre à les repérer. Je pense que beaucoup de jeux sur navigateur utilisent cette stratégie et elle peut être assez efficace. L'inconvénient est que, soit vous devez faire beaucoup de travail ennuyeux tout le temps, soit vous devez payer les maîtres du jeu pour effectuer une patrouille régulière.

Superbest
la source
4
J'ai choisi cette réponse parce qu'elle me semble la plus réfléchie en regardant la question un peu en arrière, loin des détails techniques. Je pensais depuis longtemps à choisir Adam Davis, car il contient de très bonnes idées sur le "comment faire".
Peter
1
@Alomvar Je suis content que ce soit utile. Étant donné que la question a suscité tant de votes, vous pouvez également insérer un lien vers votre jeu dans votre profil :)
Superbest
2
Ugh, est-ce que Travian est toujours là? J'ai joué cela il y a de nombreuses années, puis je me suis arrêté lorsque j'ai réalisé que le gameplay pouvait se résumer comme suit: "que le meilleur sociopathe gagne".
Mason Wheeler
25

La meilleure et la seule efficace défense contre les robots est de concevoir votre jeu de manière à ce que les joueurs ne ressentent pas le besoin de s’automatiser au départ. Lorsque vos joueurs automatisent des tâches simples qui ne nécessitent pas réellement de compétences, cela signifie que votre interface utilisateur fait défaut et qu'ils remplacent une fonctionnalité de l'interface utilisateur qui leur fait défaut.

  • Votre jeu comprend-il des tâches répétitives dans lesquelles le joueur exécute la même action encore et encore pour moudre?

    Rendez ces aspects de votre jeu moins répétitifs et plus intéressants à jouer et à rejouer.

  • Votre jeu exige-t-il que les joueurs effectuent des actions à des moments qui leur conviennent, comme au milieu de la nuit ou au travail?

    Permettez-leur de mettre en file d'attente les commandes (comme "build X1, puis X2, puis X3, en commençant chaque dès que les ressources sont disponibles") ou de planifier des actions à des moments spécifiques à l'avance (build X à 03h22).

  • Votre jeu exige-t-il que les joueurs agissent sur des événements dans un délai très court?

    Permettez-leur de configurer le jeu de manière à ce que ces actions soient déclenchées automatiquement

    • lorsque le bâtiment X est détruit, reconstruisez-le immédiatement.
    • Lorsque quelqu'un propose une ressource X pour moins que Y, achetez immédiatement jusqu'à Z unités.
    • Vendre automatiquement toutes les ressources X lorsque le stock dépasse Y unités, mais pas pour moins de Z argent par unité.

Surveillez votre communauté. Lorsque vous remarquez qu'ils automatisent autre chose, dérobez l'idée et ajoutez la possibilité de l'automatiser au jeu principal.

Philipp
la source
5
C'est une excellente suggestion qui améliore également votre jeu et réduit le risque que votre jeu devienne plus semblable à un bot. ;-) Si le fait d'être un bot fait un bon joueur de votre jeu, peut-être que le jeu devrait impliquer plus de réflexion humaine. Je ne suis pas d'accord pour dire que c'est la seule défense efficace, mais je conviens que c'est la meilleure dans l'ensemble. +1
Dronz
7
Bien que je sois d’accord avec cet esprit, malheureusement, la prémisse selon laquelle vous pouvez rendre le jeu non fastidieux est une erreur. Et si 10 000 de vos joueurs aiment le mécanicien X, mais que 10 le trouvent ennuyeux et écrivent des bots, gâchant ainsi le plaisir de jouer à 10 000? C’est ce qui se passe avec les objectifs dans les FPS: la solution analogue consisterait à réduire l’importance de la visée, mais beaucoup de joueurs aiment perfectionner leurs techniques de visée. Seuls quelques-uns ressentent le besoin d'aimbot.
Superbest
1
J'adore votre suggestion, je souhaite que davantage de jeux fassent quelque chose comme ceci au lieu de vous demander d'être autour de vous tous les jours pour être efficace
meneldal
@Superbest en fait, je peux trouver une solution qui vous permettrait de concevoir pour être plus important, mais difficile pour un botting d'être efficace. Par exemple, si vous concevez des armes pour une cadence de tir lente et pour un but plus précis, les joueurs pourraient se lier contre un botter puisqu'il ne peut pas tirer assez de balles pour chaque joueur l'attaquant
Matthew Pigram le
2
C'est exactement le point! S'il est possible de cliquer sur un bouton efficace au moment du jeu X bot, écrivez-le vous-même et donnez-le à tout le monde! - Laissez un joueur décider à l’avance de ce qui doit être construit une fois le temps imparti… Le plaisir dans les jeux, c’est une question de décisions!
Falco le
23

Ne rendez pas votre jeu si vulnérable aux efforts de johnny sur le terrain

Premièrement, assurez-vous que les joueurs qui jouent votre jeu pendant 20 minutes ou une heure par jour en une seule séance ne sont pas très désavantagés pour les joueurs qui la laissent ouverte au travail et jouent 16 heures par jour.

Cela peut nécessiter un changement dans les mécanismes de votre jeu - par exemple une allocation de mouvements qui se remplit lorsque vous ne jouez pas et permet aux joueurs d'exécuter de nombreux mouvements rapides lorsqu'ils peuvent jouer, plutôt qu'un mécanisme qui nécessite une surveillance constante.

Cela découragera les développeurs de bot car ils peuvent suivre le jeu et n'ont aucun besoin pressant de créer un automate qui effectue des actions pour eux.

Exiger des informations sur le serveur pour chaque action et ralentir les réponses du serveur

Lorsqu'un joueur joue le jeu, il demande une page qui lui présente l'interface utilisateur avec laquelle il interagit pour effectuer son déplacement. Vous pouvez insérer des éléments, tels que des éléments de formulaire invisibles, qui vérifient qu'ils ont réellement demandé la page en premier. Un nombre aléatoire que votre serveur stocke avec l'ID utilisateur et la dernière page demandée. Lorsqu'une action intervient, le serveur vérifie que cet utilisateur a renvoyé le même nombre aléatoire et exécute une action sur la page sur laquelle ils ont été vus pour la dernière fois. Cela signifie non seulement que le bot doit faire deux appels d'API pour chaque action, mais que les utilisateurs normaux ne peuvent pas ouvrir plusieurs pages et exécuter des actions rapides séquentielles (si cela pose un problème pour votre conception).

Les deux appels d’API vous permettent de ralentir les robots plus tard. Finalement, vous verrez des modèles suspects, et vous pourrez les identifier. Lorsque votre serveur détecte un motif suspect, il peut retarder la réponse de l'API lors du premier appel d'une seconde - ce qui gênera les utilisateurs, mais ralentira réellement les robots. En outre, si la deuxième demande revient "trop ​​rapidement" (quoi que cela signifie pour votre jeu), vous pouvez la rejeter ou recharger la page avec une erreur dans le jeu ou un motif pour demander une nouvelle soumission. "Vous ne pouvez pas construire cela rapidement. Prenez votre temps, s'il vous plaît." par exemple.

Écoutez vos utilisateurs et vous découvrirez ce qui leur convient et ce qui les agace.

Faire les mouvements et les actions nécessitent une réflexion

Si le jeu est un simple clicker, alors vous ne pouvez pas faire grand chose à propos des bots. Pensez à repenser votre jeu pour qu'il effectue lui-même un test similaire à celui d'un captcha.

Ne sachant rien du jeu, je ne peux rien en dire. Si cela implique de choisir l'emplacement d'un bâtiment, concevez l'interface de sorte que l'utilisateur puisse choisir n'importe où, même s'il existe des emplacements évidents qui ne fonctionneraient pas. Ou peut-être que l'utilisateur doit faire correspondre l'orientation correctement pour que le placement soit réussi. Si cela implique de choisir une action, incluez une liste plus longue d'actions, dont certaines n'auraient aucun sens dans une situation donnée.

Inclure des contrôles de bots très simples et aléatoires

Ajoutez un dialogue occasionnel, "Êtes-vous sûr?" par exemple. Modifiez la question et le libellé fréquemment et utilisez-les comme vérification ponctuelle des robots.

Changer l'API

Modifiez fréquemment l’API, ce qui les oblige à analyser la page Web en recherchant les variables correctes et leur mode de renvoi au serveur Web. Si vous développez votre interface à l'aide d'un modèle, remplacez le modèle par un code utilisant un générateur de hachage salé ou de variables aléatoires pour chaque nom de variable. Ensuite, commencez à utiliser javascript pour coder les réponses et modifiez-le fréquemment. Vous pouvez probablement écrire un logiciel qui fait tout cela pour vous, et soit tout au hasard, soit tout simplement un modèle statique que vous modifiez de temps en temps.

Adam Davis
la source
Si son jeu par navigateur, les API changent et tout cela n'aura pas d'importance. Sauf si vous êtes prêt à changer tout le texte dans le client à chaque fois aussi (ce serait horrible pour les joueurs. L'interface utilisateur change tout le temps .. beurk ..) et si les textes ne changent pas, alors il est très trivial de trouver le texte. Même avec juste jQuery. Lorsque je jouais à Travian et que nous étions sur le point d’attaquer, j’ai ouvert d’énormes quantités d’onglets, mis toutes les informations à la disposition et quand le temps s’est écoulé, j’ai fait défiler tout ce qui a été envoyé en cliquant sur soumettre. Pas de fermeture, juste rapide, mais les retards de votre api m'auraient frappé fort.
Katu
1
@ Katu Selon le jeu, de nombreux éléments de l'interface utilisateur peuvent déjà être des images. Changer les noms d'image, modifier légèrement le hachage du fichier image, etc. rendra la tâche plus ardue. Au minimum, vous les obligez à télécharger tous les éléments pour savoir quoi traiter. Ils peuvent utiliser javascript pour rechercher l'élément qui se trouve en haut à un emplacement donné de l'écran, puis essayer de l'activer, mais vous pouvez quand même rendre la tâche plus difficile en demandant au client javascript de signaler les emplacements de clics de souris plutôt que les clics d'élément.
Adam Davis le
@ Katu Vous avez finalement raison, vous pouvez vous en occuper, mais si vous faites l'effort requis assez gros, vous réduirez le nombre de personnes prêtes à participer à l'effort, ce qui peut être suffisant.
Adam Davis
2
Le problème avec "Move Allotment" est que vous dites à tous vos joueurs qu'ils ne peuvent jouer que 30 minutes par jour ou le temps qu'il faut pour en profiter, ce qui les agace, limite vos revenus publicitaires et crée une tentation énorme. de les laisser acheter davantage par microtransactions.
Random832
Je suis d'accord avec l'emplacement et l'orientation du bâtiment! C'est à la fois un avantage pour les utilisateurs légitimes et un négatif pour les bots.
miva2
13

Vous ne pouvez pas les arrêter. Mais vous pouvez rendre leur vie misérable, car ils doivent passer beaucoup de temps à écrire et à mettre à jour leurs robots. Vous devez utiliser ce que vous devez vérifier si l'utilisateur est valide.

  • Recherchez les en-têtes de demande et rejetez les demandes avec des valeurs non valides. Définissez soit l'en-tête personnalisé, soit le contrôle de l'agent existant comme utilisateur. Bien sûr, c'est facile à surmonter, mais c'est encore plus facile à vérifier. Si botwriter n’a pas d’expérience, cela peut lui prendre un certain temps pour y penser! Votre tâche est de forcer le plus grand nombre d’entre eux à renoncer, non?
  • Vous avez probablement une sorte de signature de hachage ou quelque chose dans vos demandes, qui est généré côté client avec une fonction. Alors, continuez à le changer! Faites-en un script distinct, non cacheable, et modifiez-le à des intervalles aléatoires. Créez-en quelques-unes ou modifiez-les à la volée en ajoutant du sel aléatoire au processus de hachage. Bien que ce soit à nouveau facile à surmonter, cela les obligera à surveiller votre fonction. Ils peuvent également avoir besoin d’une sorte de pipeline de déploiement constant pour tenir les utilisateurs informés. Sinon, leurs robots commenceront à envoyer des requêtes mal hachées. Vous pouvez même interdire les utilisateurs qui le font trop souvent. Les utilisateurs valides se déplaceront quand même dans votre client, ils vont donc récupérer la fonction de hachage de temps en temps. Rappelez-vous simplement de mettre à jour le côté serveur aussi (le backend basé sur un script aidera vraiment ici).
  • Gardez une trace de l'efficacité d'utilisation des ressources. S'ils sont dépensés instantanément, après que quelque chose soit devenu abordable, ou si de nouveaux raids sont toujours envoyés dans les 1 à 2 secondes du dernier, 24/7, vous avez alors affaire à un joueur hardcore ou à un bot. Vous demandez à captcha de capturer cette personne et vous la forcez à vous déconnecter. S'il continue à faire des demandes après avoir été déconnecté (bots mal écrits!), Alors c'est un bot. S'il tente de se connecter plusieurs fois sans succès, il est probablement un bot. Si cela lui prend quelques heures pour se reconnecter, il pourrait alors être un bot (ce dernier pourrait demander une assistance humaine à ce moment-là et le propriétaire pourrait être en train de dormir).
  • IP. Celui-ci pourrait éliminer la vente de bot. Si quelqu'un écrit un bot avec $$$ en tête, il se peut qu'il ne souhaite pas partager le code source. Ils vendront du temps bot à la place. S'ils sont gourmands, ils pourraient utiliser une seule machine, avec une / quelques IPS. Cela signifie que beaucoup d'utilisateurs vont commencer à partager l'IP. Ceci est risqué, car le même cas s’applique aux personnes partageant un réseau. Vous devrez vérifier si l'une des vérifications précédentes est réussie sur certaines IP, et décider manuellement si c'est un groupe d'utilisateurs légitimes, ou une armée de robots.
Polan
la source
5
Bien que ces idées soient intelligentes, elles ne sont pas seulement faciles à vaincre, mais je serais tenté d’écrire un bot simplement parce que cela semble si amusant de le vaincre, même si je ne me soucie pas vraiment de réussir dans le jeu.
Superbest
1
La plupart des points sont inutiles. Vous réfléchissez en arrière. Peu importe ce que vous faites avec tous les hachages, en-têtes, etc., le "lien pour acheter une mise à niveau pour ma taverne" doit fonctionner, non? Maintenant, je crée un bot, qui trouve ce lien, toutes les 2 heures, il clique dessus. Je me fiche de la magie que vous faites derrière cela, mais mon bot clique dessus comme le ferait l'utilisateur. L'utilisation des ressources est une bonne chose, mais peut générer beaucoup de faux positifs, ce qui nécessite un travail humain. IP .. Par exemple, travian bots (non-free) est un navigateur web personnalisé, qui envoie tout depuis votre ip.
Katu
@Superbest oui, il est facile de battre cette sécurité une fois. Mais si cela change un peu, vous devrez suivre ces changements et mettre à jour votre bot. Cela signifie passer plus de temps à écrire un bot pour passer moins de temps à jouer :). Inutile.
Polan
@ Katu vous avez raison, mes méthodes n'arrêteront pas le bot qui est un plugin pour un navigateur et qui ne fait que cliquer sur le client. Mais tout ce qui est en dehors pourrait avoir des problèmes. Le simple fait de trouver un lien et de rejouer à l'attaque par répétition ne fonctionnera pas, car le hachage peut nécessiter un horodatage et la connaissance d'une clé semi-secrète. La fonction de hachage changera de temps en temps, donc si vous n'avez pas d'interprète javascript, vous devrez réécrire votre bot tout le temps pour inclure ces changements. Ces méthodes n'empêcheront pas les gens d'écrire un bot. Cela nécessitera juste un entretien constant, vous ne gagnerez donc pas beaucoup de temps en utilisant un bot :).
Polan
2
@Polan Pas de problème si l'écriture du bot est plus amusante que de jouer en premier.
Superbest
8

En général, il est difficile de faire la distinction automatiquement entre les robots et les humains. Une forme de processus de décision assisté par l’homme donne de meilleurs résultats.

Ce que je ferais: définir des heuristiques suggérant que l'utilisateur est probablement un bot - faire beaucoup d'actions, faire des choses 24 heures sur 24, 7 jours sur 7, puis… Si ces heuristiques dépassent un certain seuil, faites un contrôle invasif.

Vous pouvez analyser manuellement l'activité des lecteurs et voir si cela semble correct. Ou vous faites un captcha la prochaine fois que l'utilisateur est en ligne. Ou (encore plus fort) envoyez-lui simplement un message dans lequel vous expliquez que vous pensez qu'il est un bot et que vous voulez qu'il réponde avec quelque chose d'humain pour prouver qu'il n'est pas un bot (comment s'est passée votre journée? Quel est votre film préféré? ... - vous pouvez en avoir beaucoup). S'il ne répond pas du tout, il est probablement un bot. S'il répond, vous vérifiez manuellement les réponses pour la ressemblance humaine et interdire les robots. Si vos heuristiques sont raisonnables, seule une petite minorité d'utilisateurs sera interrogée et le nombre de réponses à analyser sera faible. Et si vous gardez l'ensemble des questions confidentielles et changeantes, il est impossible de préparer les robots, à moins que quelqu'un n'invente SkyNet.

Martin Modrák
la source
8
Lorsque Skynet a commencé à prendre conscience de soi, tout le monde avait supposé qu'il tenterait de prendre le contrôle des forces militaires mondiales. Peu savaient-ils que son seul objectif était de dominer l’économie de son MMO préféré. C’est ainsi que les grandes guerres contre l’intelligence humaine ont été empêchées en orientant leurs ambitions agressives vers un lieu où les dommages pourraient être causés.
Dan Bryant
1
Le problème avec les messages est qu'un botter peut facilement se connecter pour jouer tous les jours et exécuter le bot sur le même compte pour gérer le travail chargé. Le bot ignorerait le message, l'humain répondrait le lendemain matin et il était difficile de punir un joueur qui répondait quelques heures trop tard à un message envoyé au milieu de la nuit.
Superbest
@Superbest Si le bot continue d'essayer de jouer pendant que l'homme dort, vous avez une bonne indication qu'il s'agit d'un bot. Le problème avec poser des questions est ce qui se passe si le joueur ne parle pas anglais?
Loren Pechtel
@ LorenPechtel Eh bien, comment allez-vous savoir quand ils dorment? Il y a beaucoup de gens avec des horaires de sommeil très inhabituels. Ce n’est pas parce qu’ils ont répondu que c’est un bot, c’est peut-être parce qu’ils n’ont pas envie de répondre et qu’ils ont décidé de le faire plus tard. En ce qui concerne la langue, on peut supposer que le joueur parle la langue dans laquelle le jeu est écrit, sinon comment accepteraient-ils les règles ou le ToS? Cela ne veut pas dire qu'il est difficile de distinguer un bot d'un étranger dans une conversation.
Superbest
@Superbest Mon impression était que le jeu ne continuerait pas tant que la question resterait sans réponse. S'ils continuent à envoyer des commandes futiles, il est évident que c'est un bot qui le fait.
Loren Pechtel
8

Embrasser le botter. Vous avez créé une API reposante, idéale pour un codeur qui expérimente l'automatisation de votre jeu. Concevez votre jeu de manière à ce que le bot ne gagne pas d'avantage sur un joueur humain du fait de son automatisation - éliminez les avantages de la rapidité d'exécution, etc. d'une machine; concevez votre jeu de manière à ce que le bot génère, si possible, les mêmes revenus qu'un joueur humain - ou du moins fournisse un environnement plus riche pour attirer plus de joueurs humains.

La question qui se pose est la suivante: pourquoi les gens créent-ils des robots pour votre jeu et vont-ils payer de l'argent pour ce privilège?

MatthewAujourd'hui
la source
4

Je ne suis pas nécessairement en désaccord avec les réponses des études informelles, mais il y a des choses techniques que vous pouvez faire pour détecter les botters et qui rendent la vie plus difficile pour elles.

  • Attribuez une note aux comptes en fonction de leur utilisation d’un bot. Cela alimentera plusieurs autres techniques et protégera les utilisateurs légitimes de votre colère.

  • Rotation de la clé de cookie de session. Cela garantit que le bot préserve ses cookies mais rend beaucoup plus difficile pour un botter de partager des cookies entre le navigateur et le bot (ce qui est très pratique lors du développement et des tests).

  • Taux limite certaines actions. Le travail le plus rapide que vous pouvez réellement faire quelque chose, et de surveiller la rapidité avec laquelle ces robots font. Cela pourrait également valoir la peine de tenir un journal en cours et d’établir des écarts-types. Même si quelqu'un ne fait quelque chose toutes les 10 secondes, s'il le fait exactement toutes les 10 secondes, il s'agit probablement d'un bot. Modifiez leur classement et déconnectez-vous.

  • Rendre la connexion plus difficile sur les comptes que vous soupçonnez d'être un bot. Les CAPTCHA et les questions et autres choses inévitables rendent les choses beaucoup plus difficiles pour un éventuel botter qui écrit automatiquement les choses.

  • Surveiller le mouvement de la souris / de la page. C'est assez simple avec javascript ces jours-ci, mais les bots n'auront naturellement aucun mouvement de souris. Si vous n'obtenez pas de "clics", ils sont peut-être mobiles ou bot. Enquêter. Il faut toutefois consigner beaucoup de données ... Vous pouvez donc réserver cette option aux comptes ayant déjà déclenché des étapes précédentes.

  • Construire des outils pour lier les comptes par comportement, IP, séquences d’actions, cadence des actions. Si vous envisagez d'interdire des personnes, assurez-vous de disposer des outils nécessaires pour vérifier manuellement leurs actes répréhensibles.

  • Faites pivoter le schéma d'URL, les variables CSRF, etc. et faites-le souvent. C'est un grand pas en arrière qui nécessite probablement plus de travail initial que jamais, mais au minimum, tout compte qui cesse soudainement de fonctionner (ou continue de marteler les anciennes URL et d'envoyer les anciens noms de variables - enregistrez-le!) besoin de leur niveau d'index bot.

Oli
la source
3

Avez-vous envisagé de faire des bots une partie intégrante du jeu? Il est difficile pour les bots de gâcher le jeu pour tout le monde si tout le monde est encouragé à les créer. Ajoutez un support pour les scripts et tout d'un coup, la dynamique du jeu change, passant de stratégies de gestion manuelle des ressources à des stratégies de conception de bots.

Kenneth Cochran
la source
3

Créez un serveur séparé réservé aux robots. Créez un classement et célébrez les gagnants. Regardez les données que cela génère. Interdire aux utilisateurs les serveurs normaux dont le profil de comportement ressemble à celui d’un bot.

des conjectures
la source
2

Quoi que vous fassiez, rappelez-vous de NE PAS rendre cela plus ennuyant pour le vrai joueur! Un grand nombre des réponses que j'ai vues (résultats de page plus lents, ne permettant pas l'ouverture de plusieurs pages pour permettre une saisie plus rapide, etc.) empêcheraient également les joueurs légitimes d'agir rapidement, ce qui les frustrera inutilement.

À mon humble avis, l’approche la plus simple peut être d’appliquer l’ingénierie sociale au problème: 1) ajoutez une clause explicite NO-BOT à votre TOS, et ajoutez que la détection de l’activité du bot va supprimer le joueur de la liste des meilleurs scores (ou avoir le label "tricheur" "attachés, afin que les gens ne soient pas aussi frustrés avec eux; si vous suivez cette voie, laissez les gens cacher les disques de tricheurs).

2) vérifiez le comportement de type bot (par exemple des pings régulièrement programmés sur le serveur, ou un timing proche de la perfection pendant de nombreuses heures), et si c'est le cas, mettez le compte en "mode bot" - affichez des captchas occasionnels et autres. . si ceux-ci sont ignorés mais que le joueur continue à jouer activement au jeu, marquez-le comme "bot" et excluez-le du classement. s'ils sont adressés, marquez-le comme "joueur puissant" et retirez-le de la liste de bots.

Ainsi, la grande majorité des joueurs ne sont jamais affectés, les joueurs inconditionnels le sont pour une courte durée et les robots ne "ruinent le jeu" pour personne d'autre.

TI Troll
la source
Et si un joueur puissant décide de botter? Je ne pense pas que le fait de "marquer" le joueur comme quelque chose ait beaucoup de sens, c'est très exploitable. Jouez simplement pendant quelques jours, puis une fois que vous aurez le drapeau, lancez le bot et ne vous faites pas prendre
Dan Pantry le