PHP & JS : Comment éviter la triche pour un jeu ?
Kopros
Messages postés
595
Date d'inscription
Statut
Membre
Dernière intervention
-
Ramu -
Ramu -
Salut à tous !
Je suis en train de faire un p'tit jeu en JS, et si on tape un record le score doit être enregistré dans une base de données.
Pour faire ça, le JS récupère le précédent record, si le score que le joueur vient de faire le dépasse il appelle le PHP en Ajax.
Le PHP vérifie que le score est bien supérieur au record d'avant et il procède à l'enregistrement.
Le truc c'est que si jamais un p'tit malin s'amuse à envoyer une fausse valeur à la place de son vrai score, pour faire péter le record alors que c'est bidon, et bien dans l'état actuel je ne peux pas le savoir.
Comment faire pour être sûr et certain que la valeur envoyée correspond bien au score fait dans le jeu ?
Le seul truc que je vois c'est de faire une requête Ajax à chaque fois qu'un point est marqué, mais c'est énormément lourd et ça va saturer la bande passante.
Vous avez des idées ?
Je suis en train de faire un p'tit jeu en JS, et si on tape un record le score doit être enregistré dans une base de données.
Pour faire ça, le JS récupère le précédent record, si le score que le joueur vient de faire le dépasse il appelle le PHP en Ajax.
Le PHP vérifie que le score est bien supérieur au record d'avant et il procède à l'enregistrement.
Le truc c'est que si jamais un p'tit malin s'amuse à envoyer une fausse valeur à la place de son vrai score, pour faire péter le record alors que c'est bidon, et bien dans l'état actuel je ne peux pas le savoir.
Comment faire pour être sûr et certain que la valeur envoyée correspond bien au score fait dans le jeu ?
Le seul truc que je vois c'est de faire une requête Ajax à chaque fois qu'un point est marqué, mais c'est énormément lourd et ça va saturer la bande passante.
Vous avez des idées ?
A voir également:
- PHP & JS : Comment éviter la triche pour un jeu ?
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Php alert ✓ - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
- Alert PHP - Forum PHP
2 réponses
Bon j'ai fait un truc mais ça me plaît pas à 100% alors je ne passe pas le topic en résolu.
En fait je conserve le système de score d'avant (c'est contenu dans le DOM) et en + j'ai ajouté une variable integer initialisée à 0. Et à chaque point marqué, cette variable s'incrémente, le résultat est hashé md5 (pour que ce soit un peu + chiant si un tricheur veut tricher) et c'est stocké dans un cookie, toujours par le JS.
Au moment de la vérif, PHP hashe le score qui lui est envoyé (celui du jeu, que j'ai pas modifié) et compare le résultat avec la valeur du cookie.
C'est pas vraiment infaillible comme méthode, mais au moins si quelqu'un veut tricher il va bien galérer !
Si quelqu'un a d'autres idées, que ce soit pour améliorer mon système, ou complètement autre chose, je suis preneur !
En fait je conserve le système de score d'avant (c'est contenu dans le DOM) et en + j'ai ajouté une variable integer initialisée à 0. Et à chaque point marqué, cette variable s'incrémente, le résultat est hashé md5 (pour que ce soit un peu + chiant si un tricheur veut tricher) et c'est stocké dans un cookie, toujours par le JS.
Au moment de la vérif, PHP hashe le score qui lui est envoyé (celui du jeu, que j'ai pas modifié) et compare le résultat avec la valeur du cookie.
C'est pas vraiment infaillible comme méthode, mais au moins si quelqu'un veut tricher il va bien galérer !
Si quelqu'un a d'autres idées, que ce soit pour améliorer mon système, ou complètement autre chose, je suis preneur !
Salut,
je me pose aussi la question pour un jeu que je prépare.
Effectivement comparer le résultat de la base et celui 'chargé' par le navigateur à l'envoi j'y pensais aussi.
Ce que je me dit c'est qu'aucune sécurité côté client n'est fiable, donc peut être voir du côté de la sécurité en PHP(pour la base j'utiliserais peut être un serveur avec node.js mais l'idée reste la même) en effectuant un max de traitement côté serveur(je sais c'est pas pratique pour un jeu en js), ou seulement ceux le calcul des scores.
Avec Ajax on peut déléguer ça dans le XML et peut être(je ne sais pas faire) surveiller que le XML ne bouge que lors du calcul du score.
Enfin ton idée reste la bonne je pense: multiplier les sécurités lors des échanges en les cryptant, comme tu dit ce n'est pas absolu mais ça complique le hacking du jeu.
La partie javascript étant celle qui va générer les valeurs(comme le score) je ne pense pas que les sécurité classiques(contre l'injection SQL) fonctionnent, peut être le plus sûr est de mettre les calculs côté AJAX pour avoir leur traitement par PHP?
Côté javascript mettre le maximum des traitements dans des objets qui comportent des attributs "private"(par var on n'y accédera pas par this. et on devra passer par une méthode spécifique qui comportera un contrôle de la page qui exécute le script).
Enfin je suis comme toi je cherche^^
je me pose aussi la question pour un jeu que je prépare.
Effectivement comparer le résultat de la base et celui 'chargé' par le navigateur à l'envoi j'y pensais aussi.
Ce que je me dit c'est qu'aucune sécurité côté client n'est fiable, donc peut être voir du côté de la sécurité en PHP(pour la base j'utiliserais peut être un serveur avec node.js mais l'idée reste la même) en effectuant un max de traitement côté serveur(je sais c'est pas pratique pour un jeu en js), ou seulement ceux le calcul des scores.
Avec Ajax on peut déléguer ça dans le XML et peut être(je ne sais pas faire) surveiller que le XML ne bouge que lors du calcul du score.
Enfin ton idée reste la bonne je pense: multiplier les sécurités lors des échanges en les cryptant, comme tu dit ce n'est pas absolu mais ça complique le hacking du jeu.
La partie javascript étant celle qui va générer les valeurs(comme le score) je ne pense pas que les sécurité classiques(contre l'injection SQL) fonctionnent, peut être le plus sûr est de mettre les calculs côté AJAX pour avoir leur traitement par PHP?
Côté javascript mettre le maximum des traitements dans des objets qui comportent des attributs "private"(par var on n'y accédera pas par this. et on devra passer par une méthode spécifique qui comportera un contrôle de la page qui exécute le script).
Enfin je suis comme toi je cherche^^