Javascript HTML5游戏-如何防止变量修改

Javascript HTML5游戏-如何防止变量修改,javascript,jquery,html,canvas,protection,Javascript,Jquery,Html,Canvas,Protection,我在画布上写了HTML5游戏,我有一个问题 我这样使用var: var score = 0; // another code ++score; 但用户可以编辑该变量(例如,在FireBug或Chrome编辑器中)——分数被黑客攻击 有什么想法吗?你无法避免这种情况。您可以通过混淆代码使其变得更难,但仍然可以破解分数 另一种更难的方法是双倍保存分数,并在循环或某些函数中检查它是否在游戏逻辑之外发生了更改,这样用户需要找到这两个变量 如果第二个分数值是另一个分数值的两倍,则通过将当前分数与所有变

我在画布上写了HTML5游戏,我有一个问题

我这样使用var:

var score = 0;
// another code 
++score;
但用户可以编辑该变量(例如,在FireBug或Chrome编辑器中)——分数被黑客攻击


有什么想法吗?

你无法避免这种情况。您可以通过混淆代码使其变得更难,但仍然可以破解分数

另一种更难的方法是双倍保存分数,并在循环或某些函数中检查它是否在游戏逻辑之外发生了更改,这样用户需要找到这两个变量


如果第二个分数值是另一个分数值的两倍,则通过将当前分数与所有变量分数进行比较更难找到分数。

您可以将分数变量作为局部变量放入类构造函数中,这样就更难获得:

function MyClass() {
  var score = 0;

  this.somethingHappened = function() {
    if (someondition) {
      score++;
    }
  }

  this.getScore = function() {
    return score;
  }

}

当然,破解代码仍然是可能的,但这根本不像更改全局变量那么简单。

您实际上无法保护在客户端运行的任何代码


因此,您无法保护变量的内容。就像Guffa说的那样,你只能让黑客变得更加困难。

Javascript是客户端执行的。客户端上发生的任何事情都可以由它控制。这是没有办法的。你可以尝试混淆你的代码,但这只会让你更难发现如何作弊。它不能阻止一个有足够决心的人

设计防作弊游戏的唯一方法是在服务器上执行所有游戏机制。当然,这在技术上更具挑战性,当用户连接不好时会损害游戏体验,并会因为需要更多服务器容量而花费额外资源,但这是唯一的方法

顺便说一下:我们有一个姐妹网站,专门针对游戏开发的问题。你可能会得到一些更好的答案。


请参阅Crockford在js

@SeCorp中关于private和public var的文章,您甚至可以替换整个对象!我认为你应该更好地保护(“‘增加难度’)增加播放高分的代码。@SeCorp:是的,你不能制作一个不可能被破解的脚本,你只能让它更难弄明白怎么做。没错,你能做的就是通过混淆来改变难度,在脚本中压缩或添加指针,以便更难解码并确保删除注释,这就是我轻松破解js脚本的方法