2010-03-30 8 views
8

Je travaille sur des jeux en utilisant javascript certains html et css, et je me demandais s'il y avait un moyen de sécuriser le jeu afin que l'utilisateur ne peut pas simplement appeler game.php? Result = victoire pour terminer le jeu et gagner quelque point.Comment créer un jeu sécurisé en javascript?

En ce moment, voici la solution que j'ai.

  • Pour un jeu de hasard, commencer la page avec le résultat déjà en place, gagner ou en vrac, puis juste faire quelques animations pour le montrer, mais tout le score et gagner/stuff en vrac est fait côté serveur.

  • Pour un jeu de combat, juste obtenir l'action de l'appel javascript, et faire le calcul des dommages, la réaction du serveur sur le oponent et juste envoyer les données.

Mais la dernière solution implique que je vais devoir envoyer des actions chaque fois que l'utilisateur fait quoi que ce soit. Cela pourrait fonctionner pour un jeu de bataille tour par tour, mais je pense que ce serait de ralentir pour n'importe quel autre type de jeu. Donc ma question est, y at-il une sorte de façon sécurisée, je peux préparer mon javascript pour sécuriser les informations envoyées.

Répondre

13

La seule façon de le sécuriser pour avoir tout le calcul et la validation se produit du côté serveur. C'est comme ça que ça se passe sur pratiquement tous les jeux en ligne. Le client ne peut jamais faire confiance à la communication en ligne et vous devez toujours vous assurer du côté serveur que l'utilisateur est en train de faire quelque chose de valable. (En théorie, de toute façon, dans la pratique, vous devez faire confiance au client pour la compensation des retards et décharger du côté client certains éléments non critiques). Pour cette raison, javascript n'est pas une très bonne langue pour développer un jeu en ligne, car chaque action doit être traitée et validée par le serveur. Pour les autres langages de programmation, ce n'est pas un gros problème, car vous pouvez créer vos propres protocoles de communication en utilisant TCP/IP pour le serveur et le client. Cependant, pour javascript, il n'y a pas de telle possibilité, car vous devez compter sur le protocole HTTP et les gestionnaires XMLHTTPRequest, ce qui rend la communication client-serveur live très inefficace. Comme vous l'avez dit, vous pouvez toujours faire l'interface en javascript, mais pour des raisons de sécurité, vous devez encore faire beaucoup de choses sur le serveur et cela ne fonctionne certainement pas pour les jeux nécessitant un contrôle plus orienté vers l'action.Donc, vous êtes assez limité pour tourner des jeux basés, si vous avez besoin de la sécurité.

+0

merci pour la réponse complète :) Je suppose que je vais coller à tour par tour et les jeux de hasard alors. – rnaud

1

Non, il n'y a aucun moyen.
Quel est le problème avec l'envoi d'actions utilisateur sur le serveur?

+1

Eh bien i » En pensant aux connexions mobiles et basses, je voudrais éviter de charger des trucs toutes les demi-secondes. – rnaud

2

Vous pourriez faire quelques trucs pour contrecarrer l'utilisateur naïf, mais probablement pas tout le monde. Tout dépend de la motivation de la personne à «attaquer» votre jeu. À la fin de la journée, l'utilisateur pourrait utiliser un débogueur javascript pour voir exactement ce que fait votre code et le répliquer. Même si vous renvoyez chaque action de jeu, l'utilisateur peut toujours répliquer cela. Si vous ne faites pas attention aux actions que l'utilisateur peut effectuer, il peut être capable de renvoyer des actions qui seraient impossibles s'il contrôlait le jeu avec le schéma de contrôle par défaut.

2

Il ne devrait pas y avoir d'URL pour la victoire. Pendant le jeu, le client doit envoyer les actions de l'utilisateur, et s'il a gagné, le serveur les redirige vers la page de victoire.

Aucun calcul/récompense ne devrait être fait sur la page de victoire, le cas échéant.

1

Cela pourrait-il être considéré comme une option? (Réponse tardive)

Transférer le critique (les choses que vous ne voulez pas être piraté), à un lecteur flash interne caché, qui agissent à la fois comme la variable critique de stockage, calculatrice (ex: points de vie) et "communicateur" au serveur pour ces données de jeu.

Il est définitivement plus sûr que JavaScript. Mais reste; Il est toujours préférable de supposer que votre côté client est 100% non sécurisé. (Même dans les jeux de C, lol: pirates)

Cependant, en transférant le trafic de données de jeu à flash, vous êtes en mesure d'utiliser certaines de ses fonctions de communication plus intéressantes, par exemple: P2P =)

+0

C'est une option très intéressante à laquelle je n'ai jamais pensé. Je n'ai pas vraiment beaucoup de connaissances en AS, mais comment cela fonctionnerait-il? –

+1

@Angelo R. Le lien a plus de détails sur la liaison AS3 avec JS: http://www.hardcode.nl/archives_155/article_334-call-javascript-function-from-as3-and-viceversa. Pour faire court, les deux côtés peuvent exécuter des appels de fonction les uns aux autres. En forçant, le trafic de données important à traverser le flash, et donc le serveur. Vous pouvez transformer le flash en un stockage de variables 'sécurisé' qui se synchronise avec le serveur, avec javascript comme 'affichage des données'. Cependant: Notez que le flash n'est pas 100% infaillible, mais il est certainement beaucoup plus difficile à décompiler par rapport à Javascript. – PicoCreator

+0

Merci pour cela, il va être une lecture intéressante .. et éventuellement le projet –

Questions connexes