Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止用户在浏览器控制台中更改游戏值_Javascript_Html_Console_Console.log - Fatal编程技术网

Javascript 防止用户在浏览器控制台中更改游戏值

Javascript 防止用户在浏览器控制台中更改游戏值,javascript,html,console,console.log,Javascript,Html,Console,Console.log,通过浏览器控制台更改纸杯蛋糕的数量,任何玩家都可以轻易地在游戏中作弊。我想知道是否有办法阻止用户这样做。这也张贴在 你无法阻止这一切。你能做的最好的事情就是缩小JS,这样玩家就更难找到合适的值来改变。事实上,任何游戏或应用程序都无法阻止这种情况;用户的计算机控制着所有的信息,所以他们可以做任何他们想做的事情 防止这种情况的唯一方法是在您控制的服务器上执行所有处理。即使如此,玩家也可以对他们的输入数据撒谎(因此使用aimbotting或其他黑客手段) 通过浏览器控制台更改纸杯蛋糕的数量 从技术上讲

通过浏览器控制台更改纸杯蛋糕的数量,任何玩家都可以轻易地在游戏中作弊。我想知道是否有办法阻止用户这样做。这也张贴在


你无法阻止这一切。你能做的最好的事情就是缩小JS,这样玩家就更难找到合适的值来改变。事实上,任何游戏或应用程序都无法阻止这种情况;用户的计算机控制着所有的信息,所以他们可以做任何他们想做的事情

防止这种情况的唯一方法是在您控制的服务器上执行所有处理。即使如此,玩家也可以对他们的输入数据撒谎(因此使用aimbotting或其他黑客手段)

通过浏览器控制台更改纸杯蛋糕的数量

从技术上讲,您可以通过创建一个新范围来防止这种情况:

(function(){
    var cupcakes = 10;
})();

console.log(cupcakes); // ReferenceError: cupcakes is not defined

但请注意,即使有这种保护(即编辑JS源代码),仍然有“欺骗”的方法。如果您正在将结果发送到服务器。。。好吧,如果不是不可能的话,那将更加困难,因为您可以通过
XMLHttpRequest
轻松发送一个简单的HTTP请求!!正如其他答案所提到的,不可能阻止用户从浏览器控制台更改值。换句话说,您只是问如何编写JS代码,以便用户无法调试它。你总是可以使用一些方法,让那些想在游戏中作弊的人日子不好过

1.混淆代码

有关模糊处理的更多信息,请查看这些链接

2.不要将游戏的控制值存储在全局变量中

不要将控制值存储在全局变量中。相反,定义一个类并将这些变量作为它的私有变量,这样用户就必须深入挖掘以找出断点的位置

3.缩小/压缩Java脚本


模糊处理或多或少也包括缩小。

实际上可能有一种方法可以达到你的目标。但这取决于游戏的逻辑

如果您可以在服务器上模拟游戏,您可以为蛋糕生成随机ID,当游戏(在客户端)创建一个新蛋糕时,它会为它请求一个ID。稍后,当蛋糕被“销毁”时,它将联系服务器并向其提供蛋糕的ID。然后,在服务器上根据收到的ID计算最终分数

通过这种方式,您可以跟踪用户实际执行的操作

但对手可以监听网络请求并确定创建新ID的请求。同样,他可以确定通知服务器该ID已“销毁”的请求

如果您的游戏逻辑允许,例如,您可以告诉服务器每5秒左右只生成一个ID。你也可以把所有的蛋糕都被“破坏”了,没有一个被错过的结果标记为欺骗(如果游戏足够难的话)


因此,它仍然不是100%安全的,但您可能能够达到相对较高的欺骗保护级别。另一方面,它增加了许多代码复杂性,您必须权衡利弊。

任何您试图提供的保护,人们都可以撤消。这是不可能的。JS是客户端的。这是不可能更改的。创建一个局部变量,该变量保存要保护的值,并且永远不要直接使用用户提供的值来更改其值。当然,如果您将分数发送到服务器,那么事情就更加困难(因为HTTP请求很容易伪造)。如果你能提供更多的信息,我们可以更好地帮助你。你可以想方设法让事情变得更尴尬,但是,我们都能看到。
(function(){
    var cupcakes = 10;
})();

console.log(cupcakes); // ReferenceError: cupcakes is not defined