Je prévois de créer un jeu d'action à un seul joueur en js / html5, et j'aimerais éviter de tricher. Je n'ai pas besoin d'une protection à 100%, car ce ne sera pas un jeu multijoueur, mais je veux un niveau de protection.
Alors, quelles stratégies proposez-vous au-delà de la réduction et de l'obscurcissement?
Je ne prendrais pas la peine de faire une simple vérification côté serveur, mais je ne veux pas utiliser le chemin Diablo 3 en conservant tous les changements d'état de ma partie côté serveur.
Puisqu'il s'agira d'une sorte de RPG, j'ai eu l'idée de créer un inspecteur de statistiques chargé de contrôler les changements brusques de leurs valeurs, mais je ne suis pas certain de la cohérence et de la fiabilité de ce dernier.
Qu'en est-il des variables et des fonctions escopes? Travailler sur des escopes plus petites chaque fois que possible est plus sûr, mais cela en vaut-il la peine?
Existe-t-il un moyen pour le javascript de vérifier lui-même le texte, comme dans une somme de contrôle?
Il existe des solutions spécifiques au navigateur? Je ne prendrais pas la peine de le limiter pour Chrome uniquement dans les premières versions.
la source
Réponses:
La réponse courte est que vous ne pouvez pas le faire. Tout ce qui fonctionne côté client, en particulier à partir des sources, peut être modifié pour déjouer vos tactiques. Si vous mettez en place un vérificateur côté client pour rechercher des modifications soudaines, un utilisateur peut simplement désactiver le vérificateur.
La bonne nouvelle est qu’en règle générale, il n’ya que très peu de tricheurs sur les jeux en mode solo. La seule exception majeure concerne les jeux qui ont de grandes communautés de "scores élevés sur youtube" comme Line Rider, où les joueurs se font concurrence sur YouTube.
Si vous visez cela ou si vous êtes trop têtu pour accepter que des personnes trichent dans le jeu ou gardent vous-même des scores élevés (ce qui est une forme de jeu multijoueur), vous devez alors effectuer tous les calculs côté serveur. . Oui, tout ce qui compte. Vous ne pouvez même pas répéter le calcul côté client pour essayer de donner le score à l'utilisateur, puis le "vérifier" avec le serveur car l'utilisateur peut simplement désactiver le contrôle et désactiver tout système garantissant qu'il y a des contrôles.
J'aimerais qu'il y ait une meilleure réponse à cette question, mais il n'y en a pas.
Cela dit, vous pouvez faire quelque chose pour rendre un peu plus difficile de tricher. Ils n'empêcheront personne sérieux de le faire et de publier une boîte à outils pour tromper, mais cela les ralentira:
Alors. Comme vous le voyez, ce n'est probablement pas la peine de suivre cette voie. C'est difficile. Nécessite beaucoup de pratiques de codage vraiment stupides, et est finalement encore relativement facile à vaincre. Vous devrez faire tous les calculs côté serveur pour éviter les tricheries. Ou laissez-vous aller et acceptez que la tricherie arrive.
la source
J'ai déjà répondu à une question comme celle- là , et je suis désolé de le dire, mais:
Est-ce la pire chose que vous puissiez dire ici? Si vous voulez faire un moteur "anti-triche", vous devrez le faire. Vous pouvez ajouter tout ce que vous voulez côté client pour faciliter le travail côté serveur, mais vous ne devez jamais faire confiance au client. Toute la logique que vous avez doit être au moins côté serveur. Vous pouvez le reproduire côté client si vous le souhaitez, mais aucune solution uniquement client ne le fera.
Et au fait, si vous voulez trouver la faiblesse de votre programme, ne le dissimulez pas, laissez les gens voir votre code et dites-leur "ici, vous avez un problème".
C'est bon pour vous, pour votre code, pour vos utilisateurs et pour la communauté.
la source
Eh bien, un bon point de départ est d'utiliser la fonction Object.freeze (qui permettra une protection contre les correctifs d'objet).
Ceci "empêche l'ajout de nouvelles propriétés", "empêche les propriétés existantes d'être supprimées", "empêche les propriétés existantes, ou leur énumérabilité, leur configurabilité ou leur capacité d'écriture" d'être modifiées "; toute modification de l'état interne doit être effectuée via des accesseurs. L'exemple suivant fonctionne sur chrome (devrait fonctionner sur firefox, je ne connais pas IE si ...):
la source
Object.freeze = function(o) {};
dans la console JS.malheureusement, vous devez emprunter le chemin diablo 3 si vous êtes vraiment préoccupé par les hacks / cheats. si vous ne l'êtes pas, vous devez effectuer les vérifications de base ou il est fortement conseillé de le faire.
... etc
1 point est un peu délicat, c'est la position du héros, puisque vous n'êtes pas inquiet, vous pouvez le laisser, mais il vaut mieux le faire aussi avec une vérification minimale comme celle ci-dessous.
J'espère que cela aide, cela semble difficile, mais vous devez apprendre à faire de vrais jeux de travail
la source
C'est fondamentalement pas possible. Il serait si facile de contourner tout ce que vous avez mis en place pour éviter de tricher.
Le problème, c’est que tous les logiciels que vous distribuez peuvent être modifiés en mémoire facilement.
D'ailleurs s'ils veulent tricher, laissez-les. Ils sont en train de ruiner le jeu pour eux-mêmes. Il n'y a pas de réelle utilité pratique pour tricher dans cette situation, il vous suffirait de détruire le gameplay par vous-même.
la source
J'ai eu une idée d'une mesure que vous pourriez prendre pour prévenir / réduire la tricherie (en plus d'autres réponses). Vous pouvez le configurer de manière à ce que le client ne reçoive pas tout le code source en même temps, plutôt que chaque fois que le client souhaite, par exemple, acheter un nouvel article dans le magasin, le client doit envoyer certaines informations à le serveur et ne recevez toutes les informations pour ce qu’ils achètent que si toutes les informations correspondent à ce qui est censé l’être. Si ce n'est pas le cas, le serveur met en liste noire leur adresse IP ou autre chose.
Vous pouvez utiliser cela conjointement avec ce que Dampes8n a dit à propos de l’utilisation de différentes versions sources: si vous pouviez trouver un moyen de générer de nombreuses versions différentes, de sorte que chaque utilisateur utiliserait une version source entièrement différente à chaque fois. vérifiez également les listes noires de cette version source, afin de ne jamais divulguer les informations d’élément correctes pour cette version source.
La raison principale en est que si un pirate informatique ne réussit pas du premier coup, il sera beaucoup plus difficile de modifier le hack, car chaque fois que le hack ne fonctionne pas parfaitement, il doit changez leur adresse IP et réécrivez le hack pour la nouvelle version source.
la source
Oui, cela ne peut être complètement fait. Toujours avoir la vérification sur le serveur. Tout ce qui a un impact sur le jeu doit nécessiter une autorisation du serveur.
C’est dans ce sens que je vais répéter d’autres réponses.
Cependant, nous pouvons faire beaucoup plus pour empêcher les tricheurs que de simplement vérifier sur le serveur. Nous devrons peut-être ajouter des vérifications spéciales du serveur. Sachez toutefois que les vérifications côté client ne sont pas sans valeur, elles permettent d’économiser la bande passante et le travail du serveur lorsque des tricheurs ne sont pas impliqués.
Ceci étant dit:
Oui, ce sont toutes des mesures d'atténuation. Nous pouvons toujours avoir un navigateur personnalisé qui ne vérifie pas l'intégrité et ne vous laisse pas accéder aux variables des portées locales ... jouer.
la source