Javascript 阻止用户执行代码

Javascript 阻止用户执行代码,javascript,obfuscation,Javascript,Obfuscation,所以我正在用JavaScript编写一个游戏,其中最大的问题是,无论是谁,只要对JS有相当的了解,都可以打开我的源代码,找出它是如何工作的,然后插入一个game.score=10000000000000进入控制台。然而,似乎除了混淆脚本之外,还可以将所有内容包装到匿名函数中 (function() { game_start = function() { //etc } //etc })(); 当我尝试从Chrome控制台运行任何代码时,它会出现unde

所以我正在用JavaScript编写一个游戏,其中最大的问题是,无论是谁,只要对JS有相当的了解,都可以打开我的源代码,找出它是如何工作的,然后插入一个
game.score=10000000000000进入控制台。然而,似乎除了混淆脚本之外,还可以将所有内容包装到匿名函数中

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

当我尝试从Chrome控制台运行任何代码时,它会出现
undefined
。这是期望的结果,但是有没有办法绕过我的方法,使它变得无用?或者哪怕是一种更好的方法来防止从控制台运行游戏?

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

没有办法确保玩家不会作弊。即使代码非常混乱(我说的是
H5b(b){if(b.pd()&&b.Ca&&b.gKa){var a=b.ra(RT.Nwa)
),您仍然可以观察UI更改或网络请求,并从那里跟踪它

有些人使用AJAX调用来验证分数,例如,每次分数增加/减少时,应用程序都会向后端发出AJAX调用,您也会在后端跟踪分数。当用户提交最终分数时,您会将其与后端分数进行核对,如果分数不同,则您会知道此人在作弊

然而,这不会阻止人们编写一个脚本来进行这些ajax调用,从而使其得分有效


tl;dr:不,没有办法确保用户端代码不被破坏。

客户端代码永远不可能是真正不可破坏的。你可以在chrome中添加一个断点并更改任何你想更改的内容。不要费心在这方面投入太多精力。你最好的办法是混淆/最小化代码,这样很难修改阅读。看看像uglifyjsSee这样的东西,模糊处理并不能解决这个问题。事实上,我甚至不必触碰你的JS…我只需要等待网络数据发送。模糊的安全性从来都不是一个好主意,至少游戏逻辑需要在服务器端验证。我明白,防止作弊是不可能的,我想It’我只是想知道我能制造多大的障碍。听起来是个有趣的解决方案。