2012-09-19 61 views
5

所以我正在用JavaScript编写游戏,最大的问题是谁玩的人谁可能有一个JS的体面知识可以打开我的源代码,弄清楚它是如何工作的,然后将game.score = 100000000000000;插入控制台。但是,似乎除了混淆脚本之外,将所有内容都包含在匿名函数中也是有用的。防止用户执行代码

(function() { 
    game_start = function() { 
     //etc 
    } 
    //etc 
})(); 

当我尝试和运行任何从Chrome控制台的代码,它undefined出现。这是期望的结果,但是有没有办法绕过我的方法来使它无用?或者甚至有更好的方法来阻止事情从控制台运行?

+4

客户端代码可以*永远不会*真正不可破坏。 –

+4

你可以在chrome中添加一个断点并改变任何你想要的。不要为此付出太多的努力。最好的办法是混淆/最小化代码,这样很难阅读。看看类似uglifyjs –

+0

请参阅http://stackoverflow.com/a/11960187/453277 –

回答

4

没有办法确保这个人不会作弊。即使使用了严重混淆的代码(我正在谈论诸如H5b(b){if(b.pd()&&b.Ca&&b.gKa){var a=b.ra(RT.Nwa)之类的东西),您仍然可以观看UI更改或网络请求并从此处进行跟踪。

有些人使用AJAX调用来验证分数,例如,每次分数增加/减少时,应用程序都会向后端发出AJAX呼叫,并且您也会跟踪后端的分数。当用户提交最后的分数时,你会根据后端分数来检查它,如果它不同,那么你就会知道这个人在作弊。

但是,这不会阻止人们编写脚本,使这些ajax调用,并以这种方式使得它的分数有效。

tl; dr:不,没有办法确保用户端代码不会受到影响。

+0

听起来像一个有趣的解决方案。 – Polyov

3

对不起,但没有办法真正防止用户在他的机器上运行游戏时作弊。任何在用户机器上运行的代码都可以由用户操纵。当你想使它无法作弊时,你必须在服务器上实现所有的游戏逻辑,不要发送任何玩家不应该知道的信息,也不要接受玩家不允许的任何命令做。

+0

或者,至少该游戏逻辑需要在服务器端进行验证。 – Brad

+0

我知道防止作弊是不可能的,我只是想知道我能创造多大的障碍。 – Polyov