Comment protéger l'envoi de scores de jeux HTML5 à mon serveur

13

Sur le backend, j'utilise java. J'ai un jeu en HTML5; lorsque l'utilisateur le termine, j'envoie un appel Ajax pour enregistrer le score dans la base de données. Maintenant, quelqu'un peut facilement utiliser des outils comme Fiddler et firebug pour modifier cette demande ajax et envoyer un score bien meilleur au serveur. Comment puis-je m'assurer que l'utilisateur ne peut pas manipuler les scores!

Deepak Singhal
la source

Réponses:

18

N'envoyez pas simplement un score entier au serveur. Envoyez une collection de statistiques de jeu qui peuvent être utilisées pour vérifier que le score est réaliste. Ou vous pouvez implémenter une clé pré-partagée pour calculer le score. Vous pouvez envoyer des scores et des statistiques incrémentiels tout au long du jeu et vous assurer que l'augmentation est raisonnable.

Cependant, je ne m'en inquiéterais pas trop. Les suggestions ci-dessus rendront plus difficile, mais pas impossible, d'envoyer un faux score. Cependant, si vous le rendez un peu difficile, une grande majorité de personnes qui jouent à votre jeu ne seront pas intéressées à essayer de le tromper.

Faites attention à la façon dont vous autorisez votre jeu à communiquer avec votre serveur. Vous ne voulez pas que votre jeu soit un point d'entrée dans votre serveur pour le piratage. Assurez-vous de toujours valider votre saisie et de ne jamais faire confiance au client.

MichaelHouse
la source
6
Voir programmers.stackexchange.com/questions/150127/… et gamedev.stackexchange.com/questions/37392/… pour terminer avec "Ne jamais faire confiance au client"
dievardump
@ Byte56 aucune forme d'obscurcissement ou de cryptage ne protégera votre code d'un débogueur utilisé pour modifier les données du jeu pendant le jeu. Si le gameplay se produit sur le client, il est essentiellement impossible d'empêcher cette forme de triche. Un navigateur compatible Javascript n'est pas un appareil informatique de confiance.
MarkR
10

Comme l'a dit Byte56: "ne faites jamais confiance au client", mais:

Ne jamais faire confiance au client a un prix:
avoir tous les jeux joués sur le serveur augmentera considérablement le coût de votre infrastructure.

En supposant que la plupart des joueurs ne tricheront pas
et que le meilleur score se stabilisera après un peu de temps et cessera de changer beaucoup

il y a une voie médiane.

Enregistrez les jeux (sur le client).
(Selon le type de jeu, cela peut être super facile (par exemple, les échecs) ou un peu compliqué (par exemple, un FPS multijoueur),
mais c'est toujours faisable.)

Lorsqu'un joueur termine une partie, il suffit de soumettre le score.
Si le score se situe dans une certaine plage au sommet (par exemple, 1% ou 5 premiers),
demandez les données enregistrées au joueur
et rejouez ce jeu sur le serveur.
Si les scores correspondent, acceptez le score.

De cette façon, vous n'avez pas besoin de ressources supplémentaires côté serveur pour la plupart des jeux,
mais vous pouvez vous assurer que les meilleurs scores sont valides.

Andreas
la source
2
En d'autres termes, qui se soucie de tricher pour autre chose que les meilleurs scores (pourquoi feraient-ils cela de toute façon?) Donc ce sont les seuls que vous devez valider.
jhocking
4

Ne t'en fais pas; la protection contre toutes les attaques est pratiquement impossible si vous faites confiance au client. Si personne n'utilise Fiddler, etc., pour modifier la demande AJAX, il peut simplement lancer un débogueur JS et modifier vos données de jeu pour se donner 1000 vies, etc., ou modifier votre code, ou faire 100 autres choses auxquelles vous n'avez pas pensé.

J'ai écrit un tel jeu il y a plusieurs années, et à ma connaissance, personne n'a triché de cette façon. Il n'y avait pas de prix, sauf avoir votre nom sur la table de score.

MarkR
la source
4

Réduisez la motivation sociale à tricher en utilisant, par exemple, des classements sociaux (la tricherie ne fait que paraître belle à une poignée d'amis, elle ne la gâte pas pour tout le monde).

Vérifiez sur le serveur. Joel Poloney avait une bonne description des techniques dans Game Developer 2012 September "Scale Your Online Game"

Vincent Scheib
la source
2

Lorsque vous souhaitez créer un jeu en ligne infaillible, vous devez gérer toute la logique du jeu sur le serveur. Tout ce qui se passe côté client peut être contrôlé et manipulé par l'utilisateur. Il existe des techniques comme le chiffrement ou l'obscurcissement que vous pouvez essayer, mais en fin de compte, ce n'est que de la sécurité par l'obscurité qui peut être contournée par quelqu'un qui est suffisamment déterminé.

Bien sûr, un jeu qui s'exécute sur le serveur est beaucoup plus compliqué à développer, nécessite beaucoup plus de ressources côté serveur et la latence du réseau est préjudiciable à l'expérience de jeu (en particulier pour les jeux rapides), mais c'est le seul moyen empêcher les joueurs de tricher.

Philipp
la source
Même cela n'empêchera pas toute tricherie - juste l'évidence "ouais, j'ai légitimement un bazillion de points". Étant donné que quelque chose doit s'exécuter sur le client, ils se retrouvent malgré tout avec un certain contrôle. À tout le moins, tout client - en particulier un navigateur Web - est scriptable.
cHao