防止在控制台中进行JS编辑

时间:2018-08-14 11:02:01

标签: javascript game-development

基本上是标题所说的。我正在制作一个游戏,其中大部分是用js开发的。我担心的是,玩家统计信息只是其对象中的变量,并且很容易在浏览器控制台中更改(例如player.hitpoints = 1000;)。

有什么方法可以隐藏某些对象/变量,使其无法在浏览器控制台中进行编辑?

5 个答案:

答案 0 :(得分:2)

JavaScript是客户端脚本语言,这意味着它是客户端计算机上的解释器,他可以执行或更改所需的任何内容。您可以丑化和最小化代码以使代码模糊,但这不会阻止用户对其进行更改。

我只是在Google上搜索“在线混淆JavaScript代码”,并且发现了此链接,其中包含混淆过程前后的一个很好的例子-here

The differences are amazing...

答案 1 :(得分:1)

其他答案已经解释了混淆和客户端JavaScript的固有局限性。它们是正确且相关的,但没有直接解决问题。

要使其不可能通过浏览器控制台访问变量,您需要将其设置为函数内部的局部变量。例如,代替:

var player = {hitpoints: 100};

// game logic here

您会这样做:

(function() {
  var player = {hitpoints: 100};

  // game logic here
})();

这将创建一个匿名函数,然后立即调用它,即所谓的IIFE。现在,player不再是全局的(即window对象的属性),而是仅存在于此函数中。


¹仍然可以通过调试器完成,但是比仅仅复制和粘贴一些命令要困难得多。

答案 2 :(得分:0)

您可以使用JWT生成不经常更改的不可变数据。对于您的情况,我建议将状态存储在服务器上。

答案 3 :(得分:0)

您可以缩小/缩小代码,以使某些人很难修改它,但是最重要的部分是验证服务器端的所有内容。如果他们的生命值等于每秒10秒,下一秒等于10000,则很明显有些麻烦,服务器可能会阻止自己将其广播给其他玩家-本质上将ne-er-well-well隔离到了自己的PC上。 >

答案 4 :(得分:0)

用let和const声明的标识符确实具有块作用域。因此,如果您的变量未使用var声明,请使用block语句。

示例: code:{ //your code... }

code: {
  let hitpoint = 12;
  let kill = function() {
    hitpoint -= 12;
  }
//function kill(){} is accessible from outside 
//let kill = function(){} is not accessible from outside

  console.log("From inside:", hitpoint)

} 

try {
  console.log("From outside:", hitpoint)
} catch (err) {
  console.log("From outside:", "It gives an error. So you can't access it from the console or anywhere outside the code")
}