Comment empêchez-vous la copie ou la modification de votre jeu Web JavaScript / HTML5?


45

Je suis en train de planifier un jeu construit avec JavaScript et HTML5.

Je n'arrive pas à comprendre comment empêcher quelqu'un de simplement copier le code JavaScript du serveur Web et créer son propre jeu avec ce jeu (ce n'est pas ma préoccupation principale), ou de substituer ses propres fonctions JavaScript et de créer un espoir pour des clients fiables. sauvage si le jeu devait finalement supporter le mode multijoueur.

Peut-on faire quelque chose pour empêcher quiconque de lire le code JavaScript?

Si ce n'est pas le cas, tout le traitement du jeu doit-il avoir lieu sur un serveur quelque part, les seules responsabilités du client étant de capturer les entrées de l'utilisateur et de dessiner des graphiques?


22
Le dernier paragraphe que vous lisez est à peu près correct, il vaut pour les applications professionnelles et pour les jeux, traitez toujours le client comme un hôte.
Nate

4
Si je peux le lire, mon navigateur en a déjà une copie. Ensuite, je peux également le sauvegarder ailleurs. Tout ce que vous permettez d'être lu peut également être copié.
BerggreenDK

Réponses:


44

Conservez toutes vos données et logiques de jeu sur le serveur. Une partie du jeu côté client peut quand même être copiée à l'aide des outils appropriés (même si c'est en Flash ou en Java), alors acceptez-le et ne vous en souciez pas trop.

Pour que votre javascript reste moins copiable, en raison d'une mauvaise lisibilité, vous pouvez le réduire . Quoi qu’il en soit, c’est une bonne pratique car le téléchargement du site de jeu est plus rapide.


4
Selon les pratiques de codage, tout le contenu du serveur peut également être compromis. Minifier le code et masquer seulement dissuade ceux qui ne veulent pas prendre le temps et cartographient logiquement ce qu’il fait. En bout de ligne, si vous vous inquiétez des droits de propriété intellectuelle de votre code; ne le mettez pas sur le web.
John

1
Cela ne signifie pas que vous ne devriez pas minifier, cela dissuadera les paresseux. Vous pouvez également essayer de traiter votre logique de jeu sur le serveur et renvoyer des objets json via ajax, mais le retour peut toujours être visualisé avec firebug. Brouiller votre version de production mais garder une version fortement commentée pour vous (cela rend plus difficile à maintenir). Vous pouvez faire des choses pour dissuader les gens, mais ce n’est jamais sûr à 100%.
John

3
Effectivement. Développer du code minifié ne demande même pas beaucoup d'effort. jsbeautifier.org
James

@ John remarque qu'il est parfois inutile de dissuader les paresseux, car certains jeux sont ruinés dès qu'un seul tricheur apparaît, il n'est donc pas pertinent si un ou plusieurs d'entre eux trichent.
o0 '.

11

comment empêcher quelqu'un de simplement copier le code JavaScript du serveur Web et de créer son propre jeu avec celui-ci (ce n'est pas ma principale préoccupation)

C'est là que la loi aide. En pratique, cela ne semble pas arriver très souvent.

ou substituer leurs propres fonctions JavaScript et anéantir tout espoir de clients fiables si le jeu devait finalement prendre en charge le mode multijoueur.

Il n'y a pas de clients fiables dans la nature, pour exactement ce genre de raison. Abandonnez ce rêve maintenant. :)


La loi ne sera pas d'une grande utilité si le site qui l'héberge se trouve dans un pays qui se soucie peu des droits de propriété intellectuelle ou qui est par ailleurs antagoniste pour votre pays pour une raison quelconque. Même lorsque ce n'est pas le cas, le coût d'une action en justice (potentiellement internationale) va probablement bien au-delà des ressources financières de quelqu'un qui poserait cette question ici.
Paul Legato

L'intention de la réponse n'était pas tant de recommander une action en justice, mais de suggérer qu'essayer de verrouiller de tels logiciels est surtout inutile, du moins en partie parce que beaucoup de ceux qui voudraient le copier sont découragés par la loi, mais aussi parce que les clients peuvent être désossés, qu’ils utilisent Javascript ou non.
Kylotan

8

Tout comme tout le monde a recommandé; conservez autant de code que possible côté serveur.

Une méthode que j'ai utilisée pour traiter la copie de code est un peu étrange, mais elle a bien fonctionné jusqu'à présent.

  • Côté serveur, générez un identifiant unique et stockez-le pour plus tard.
  • Côté serveur, ajoutez un identifiant unique dans l'élément de script lors du rendu html.
  • Côté client, créez une connexion WebSocket et transmettez l'ID unique au serveur.
  • Côté serveur, correspond l'id à la liste actuelle.
  • Si aucune correspondance n'est trouvée, fermez la connexion.
  • Si une correspondance est trouvée, remplacez le gestionnaire de messages par votre "correct" et l'ID de suppression.
  • Diffusez votre code secret sur le client en tant que JSON, {"func": "function () {dostuff ();}"}
  • Côté client, surveillez les messages, s’ils contiennent "func", évaluez-les.

Désormais, votre code secret est exécuté côté client et n'apparaîtra ni dans les vues / sources, ni dans les inspecteurs / consoles. Il y a encore des moyens pour obtenir le code, mais c'est un peu plus difficile.


Si j'avais besoin de récupérer quelque chose de la solution ci-dessus; Je voudrais aussi connecter True WebSocket et essayer de créer un "faux client", ou utiliser un outil de débogage Firebug dans un navigateur et simplement arrêter le script pour extraire les valeurs.
BerggreenDK

Vous ne pouvez créer un faux client que si vous êtes en mesure de prédire quels identifiants uniques sont actuellement disponibles, car ils sont générés au moment du chargement de la page et lancés au moment de la connexion au script. En outre, il est difficile d’arrêter le script et d’examiner les valeurs, car vous évaluez une fonction anonyme. Comme je le disais, il y a encore des moyens pour obtenir le code, c'est juste plus difficile. Pour la plupart, assez pour que votre code soit "suffisamment sûr". Vous ne pouvez pas faire beaucoup plus que cela avec le code côté client.
Stephen Bélanger

Il serait assez facile d'écrire un faux client qui charge simplement le client réel à partir du serveur et en extrait la valeur secrète actuelle à chaque démarrage.
Paul Legato

Je ne dirais pas que c'est "facile" autant que "pas impossible". Comme je l'ai dit, il existe des moyens de contourner le problème. Il n'y a pas de système parfaitement sécurisé. Des interfaces suffisamment masquées pour que la plupart trouvent trop d’efforts de piratage. Dans ce cas, vous transmettriez des morceaux de code en continu. Un pirate informatique aurait donc besoin de créer un client pour recevoir et organiser le code en une structure utile. Vous pouvez diffuser du code selon vos besoins, afin que le pirate informatique n'ait pas un accès immédiat au vidage de code complet.
Stephen Belanger

3

La seule façon d'être raisonnablement sûr que votre code de jeu sera sécurisé est de créer un jeu de type client / serveur et de mettre autant de code que possible sur le serveur. Et bien sûr, sécurisez ce serveur!

Le problème principal est que si du code est en cours d'exécution sur mon ordinateur, je peux l'inspecter, le décompiler et comprendre comment il fonctionne. Ceci est vrai pour JavaScript, Flash, C ++, tout le reste. En fait, dans le développement de MMO (où se trouve l'essentiel de mon expérience professionnelle), on suppose dès le départ que le client est compromis: tout ce que vous avez écrit pour le client est déjà entre les mains de celui qui le souhaite, malveillant ou non. ne pas.

Réduire le code fournit une protection minime contre les personnes trop paresseuses pour l'exploiter à l'aide de l'un des nombreux outils disponibles. (Mais le code de production doit être minimisé pour réduire son empreinte de données.)

Mais si vous vous trouvez dans une situation où, par exemple, votre patron souhaite une sorte de protection de code, vous pouvez utiliser Google "Javascript obfuscator" - il existe de nombreux logiciels gratuits et payants qui rendent JS au moins aussi impénétrable. décompiler en Flash est.


Je veux juste souligner que C ++ n'est pas au même niveau que Javascript. C ++ compile en assembleur, ce qui nécessite une lecture pour comprendre la logique d’un jeu. Chaque instruction en C ++ peut créer plusieurs lignes dans un assemblage, ce qui en fait une tâche très fastidieuse. Javascript obscurcissant n'est pas le même, puisque c'est le même langage. Tout le monde peut "l'embellir" et commencer à lire des déclarations lisibles par l'homme.
TomTsagk

3

En plus de tout ce qui a trait à l'obscurcissement du code, veillez à placer une déclaration de copyright très claire en haut de chaque fichier et à indiquer clairement que la licence ne permet aucune modification ni utilisation commerciale. Cela vous donne un recours légal si quelqu'un essaie de le copier. Si vous n'êtes pas disposé à aller au tribunal à ce sujet, alors toute cette question est essentiellement académique.


C'est bien pour ce que ça vaut, mais ce n'est pas beaucoup. Le concept de propriété intellectuelle n’est en pratique pas reconnu dans de nombreux pays et, en tout état de cause, les frais de justice d’un procès vont probablement bien au-delà de ce qu’une affiche de ce site propose, en particulier si l’attaquant se trouve dans un autre pays.
Paul Legato

0

Je pense que si vous rendiez votre jeu multijoueur, ce qui implique de garder votre logique de jeu sur le serveur, vous le rendriez au moins moins attrayant à voler. Vous ne pouvez pas vraiment faire confiance au client. Comme quelqu'un l'a déjà mentionné, il existe des outils pour les langages même compilés, tels que Java et Flash, qui peuvent procéder au reverse engineering du texte du code à partir du code octet.


-1

Vous devez utiliser un minificateur Javascript. Il existe de nombreuses options disponibles, n'hésitez pas à en trouver une que vous aimez. Pour vous épargner quelques recherches, vous pouvez essayer Yahoo Minifier . Je n'ai pas couru cela moi-même mais je suppose que cela fera ce dont vous avez besoin. L'objectif est de 1) réduire la taille du fichier et 2) masquer le code. Ceci est accompli en supprimant tous les espaces blancs, les commentaires et en remplaçant les noms de variables par des noms plus brefs et insensés.

De nos jours, la plupart des applications Web utilisent une quantité importante de Javascript et utilisent des outils tels que ceux-ci pour protéger leur propriété intellectuelle. Comme d'autres l'ont dit, vous devriez toujours demander: "Puis-je faire cela sur le serveur?" pour les opérations importantes ou sensibles, mais je pense que cela devrait offrir une certaine protection.


7
La sécurité par obscurité occulte le potentiel de sécurité. :)
Rushyo

1
Oh s'il vous plait. J'entends cette citation tout le temps mais ce n'est absolument pas vrai. En vérité, le fait de cacher le JS dissuaderait au moins certaines personnes.

2
minificateur ne l'a pas aidé. Je crois que la plupart des gens "sérieux" savent comment "étendre" ces scripts à nouveau.
BerggreenDK

1
@Sergio: vous entendez cette citation tout le temps parce que, vous savez, c'est vrai . Cela dissuadera "certaines" personnes, c'est vrai, mais dissuader certaines "personnes" est inutile: quand vous êtes craqué une fois , vous tombez.
o0 '.

-1

Utilisez le compilateur de fermetures Google http://code.google.com/closure/compiler/ Ce n'est pas simplement un minimiseur js;)

Quels sont les avantages d'utiliser Closure Compiler?

  1. Efficacité. Le compilateur Closure réduit la taille de vos fichiers JavaScript et les rend plus efficaces, ce qui accélère le chargement de votre application et réduit vos besoins en bande passante.

  2. Vérification du code. Le compilateur Closure fournit des avertissements pour JavaScript illégal et des avertissements pour des opérations potentiellement dangereuses, vous aidant à produire du JavaScript moins bogué et plus facile à maintenir.1.


-1

Ou vous pouvez utiliser quelque chose comme Game Maker HTML5 pour créer votre jeu qui masquera le code pour vous. Cela signifie que cela rendra le code illisible pour les humains. Et ce sera presque impossible à éditer.


2
-1 L'obscurcissement n'ira que très loin. Cela ne protégera certainement pas le jeu de la copie ou de la modification - comme cela a été mentionné dans les autres réponses d'obscurcissement à cette question.
doppelgreener

-1

Toute propriété doit être conservée côté serveur. Côté client, vous n'en fournissez que suffisamment pour que cela facilite leur utilisation du jeu.


-1

Mettre tout sur le serveur peut entraîner des problèmes de performances et ne pas utiliser tout le potentiel du Web tel que nous le connaissons aujourd'hui.

Vous pouvez écrire votre code en c ++ et le compiler en binaires.

Client natif (NaCl).

Voir https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser


Bienvenue sur GDSE. OP parle spécifiquement de JavaScript; par conséquent, bien qu’ils puissent peut -être réécrire en C ++ et utiliser NaCl, cette solution ne répond pas vraiment aux besoins énoncés. En outre, les réponses doivent être aussi autonomes que raisonnablement possible - mentionner NaCl et renverser un lien ne revient pas à offrir un résumé de ce qu'est NaCl ou de la raison pour laquelle il pourrait aider.
Pikalek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.