我正在计划使用JavaScript和HTML5构建的游戏。
我无法理解您如何才能防止某人从Web服务器上简单地复制JavaScript并使用它来制作自己的游戏(这不是我最大的担心),或者替代他们自己的JavaScript功能并在市场中破灭对可靠客户端的希望如果游戏最终要支持多人游戏,那就太疯狂了。
可以采取任何措施阻止任何人阅读JavaScript吗?
如果不是,是否所有游戏处理都应在某处的服务器上进行,而客户的唯一职责是捕获用户输入并绘制图形?
我正在计划使用JavaScript和HTML5构建的游戏。
我无法理解您如何才能防止某人从Web服务器上简单地复制JavaScript并使用它来制作自己的游戏(这不是我最大的担心),或者替代他们自己的JavaScript功能并在市场中破灭对可靠客户端的希望如果游戏最终要支持多人游戏,那就太疯狂了。
可以采取任何措施阻止任何人阅读JavaScript吗?
如果不是,是否所有游戏处理都应在某处的服务器上进行,而客户的唯一职责是捕获用户输入并绘制图形?
Answers:
将所有游戏数据和逻辑保存在服务器上。无论如何,都可以使用适当的工具(即使是在Flash或Java中)复制客户端的部分游戏,因此只需接受即可,不必太在意。
由于可读性差,要使您的JavaScript不可复制,可以将其缩小。无论如何,这是一个好习惯,因为它可以加快游戏网站的下载速度。
如何防止某人简单地从Web服务器复制JavaScript并用它制作自己的游戏(这不是我最大的担心)
这是法律帮助的地方。实际上,这种情况似乎很少发生。
或替换他们自己的JavaScript函数,如果游戏最终要支持多人游戏,那么对于可靠客户的希望就破灭了。
正是由于这种原因,没有可靠的客户。现在就放弃这个梦想。:)
正如其他所有人所推荐的一样;在服务器端保留尽可能多的代码。
我用来处理代码复制的方法有点奇怪,但到目前为止效果很好。
现在,您的秘密代码正在客户端执行,并且不会显示在视图源或检查器/控制台中。仍然有获取代码的方法,但是要困难得多。
合理确定您的游戏代码将是安全的唯一方法是构建客户端/服务器类型的游戏,并在服务器上放置尽可能多的代码。当然,还要确保该服务器的安全!
主要问题是,如果代码在我的计算机上运行,则可以对其进行检查,反编译并确定其工作方式。对于JavaScript,Flash,C ++或其他任何语言都是如此。实际上,在MMO开发(这是我的专业经验所基于的地方)中,从一开始就就假设客户受到了损害:您为客户编写的任何内容都已经在想要它的人的手中,无论是恶意的还是恶意的不。
精简代码的确为那些懒惰的人提供了很少的保护,而这些人懒得使用现有的众多工具之一将其最小化。(但是应该减少生产代码以减少其数据占用量。)
但是,如果您遇到的情况是,例如,您的老板想要某种代码保护,则可以使用Google“ JavaScript混淆器”进行搜索-有很多免费的收费软件,使得JS至少不渗透像Flash一样进行反编译。
除了所有关于代码混淆的讨论之外,请确保在每个文件的顶部放置一个非常清晰的版权声明,并明确表明该许可证不允许更改或商业使用。如果有人尝试复制,这将为您提供法律追索权。如果您不愿意为此提起诉讼,那么整个问题大部分都是学术性的。
我认为,如果您使游戏成为多人游戏,这需要将游戏逻辑保留在服务器中,那么您可能至少会降低其吸引力。您不能真正信任客户。就像已经提到的那样,甚至有一些用于编译语言(例如Java和Flash)的工具,它们可以对字节码中的代码文本进行反向工程。
您需要使用Javascript Minifier。有许多可用的选项可随时找到您喜欢的选项。为了节省您一些研究,您可以尝试Yahoo Minifier。我自己还没有运行,但是我想它会满足您的需求。目标是1)减少文件大小和2)混淆代码。这是通过删除所有空格,注释并将变量名替换为较短,无意义的变量来实现的。
当今,大多数Web应用程序都具有大量的Javascript,并使用诸如此类的工具来尝试保护其IP。正如其他人所说,您应该经常问:“我可以在服务器上这样做吗?” 对于重要或敏感的操作,但我认为这应该提供一些保护。
使用Google闭包编译器http://code.google.com/closure/compiler/ 不仅仅是js最小化器;)
使用Closure Compiler有什么好处?
效率。Closure Compiler减小了JavaScript文件的大小并使它们更有效,从而帮助您的应用程序更快地加载并减少了带宽需求。
代码检查。Closure Compiler提供了针对非法JavaScript的警告和针对潜在危险操作的警告,从而帮助您生成错误更少,更易于维护的JavaScript。
或者,您可以使用Game Maker HTML5之类的东西来创建您的游戏,而这会混淆您的代码。这意味着它将使人类无法阅读该代码。而且几乎不可能进行编辑。
将所有内容放在服务器上可能会出现性能问题,而不能像我们今天所知道的那样真正利用网络的所有潜力。
您可以用c ++编写代码并将其编译为二进制文件。
本机客户端(NaCl)。
参见https://stackoverflow.com/questions/9018537/how-to-run-c-programs-on-the-web-inside-a-browser