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).
la source
Réponses:
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:
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.
la source
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
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.
la source
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.
la source
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.
la source
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.
la source
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?
la source
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.
la source
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.
la source
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.
la source
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.
la source