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