如何解决防止Javascript游戏进行调整/入侵
| 由于最近对浏览器的增强,使用画布和javascript开发游戏已成为一个不错的选择,但是现在可以轻松访问代码了,只需编写javascript:score=99999
要么
javascript:lives=99
将破坏游戏目标。
我知道可以通过服务器端的一些检查来完成某些工作,但是我宁愿访问服务器只是在最后存储玩家统计信息,或者在大多数情况下甚至只将其作为客户端。
我想知道至少是否有一些最佳实践。
(使用不太明显的变量名称只是一个开始,但还不够)
-添加-
感谢您的答复,我一直在寻找改进客户端代码的方式,足以阻止“偶然的黑客”,但仍将代码保持尽可能干净。
正如我在许多Flash游戏中所看到的那样,任何真正想要破解它的人都将成功,即使通过服务器端检查也是如此。
解决方法
我会说我的评论:将每个源代码放在
(function(){ }());
中。这样,就无法从外部访问变量和函数。
例:
(function(){
var a = \'Foo\';
var b = 42;
function helloWorld(a,b){
for(i=0;i<b;i++)console.log(a);
}
helloWorld(a,b);
});
//Can\'t access to a,b,or helloWorld using javascript: or default console of Google Chrome,//but people still can see by looking source code and may be modified by other tools
//(see comments of Tom & user120242)
当我深入研究Les Paul Google Doodle时,我就“学习”了这种技术。
为了更加安全(不是完全安全,但是会惹恼一些黑客),请使用诸如YUI压缩程序或打包程序之类的工具压缩和混淆脚本。
, 一种方法是也将每个移动的记录发送到服务器,然后验证这些移动是否会获得该分数。
对于单人纸牌或国际象棋这样的游戏而言,这很容易,但对于更复杂的游戏而言却并非如此。
一个更简单的版本是计算出每秒或每次移动可获得的最高分,然后验证分数不高于理论最高分。
另一种方法是将每个移动记录在服务器上,并在服务器上总计得分。这意味着游戏结束时没有发送,这些变量仅用于显示,而不是真实分数。
脱机游戏可能会在高分表上加注星标或表明未经验证的内容。
值得指出的是,使用任何JavaScript调试器,例如Webkit中的Inspector,Firefox的Firebug或Opera上的Dragonfly,更改客户端变量的值都是很简单的,即使您的代码位于关闭。任何形式的混淆都是没有意义的,因为在玩游戏时,很容易看到哪个变量对应于得分,并且任何编码或任何内容都可以从代码中简单读出。
, 按优先顺序:
将玩家的动作或统计信息发送到服务器。防止奇怪的行为。
例如:分数太高,无效的动作,无法重播的动作等
防止客户端出现异常行为。与上述相同,但不在服务器上。例如:突然的生活改变,移动太快等等
创建混淆的JS输出(无论如何,您都应该这样做以减小JS的大小),例如:GWT(Java到JS编译器),Google Closure编译器(ADVANCED_OPTIMIZATIONS将混淆更多,--output-wrapper(function(){%output%}) ()括起来),Yahoo Compressor
模糊变量值,例如:编码字符串(异或,替换,BASE64),不使用常规变量增量
使用闭包来封装变量名:(function(){在这里编码})()
编辑:我想明确指出,最好的解决方案仍然是将计算移至服务器,正如Rich Bradshaw所说的那样。即使您混淆了代码,这些事情也只能做很多事情。
这里的链接也适用于您的Javascript游戏,我认为这可能是您问题的最佳答案:什么是阻止人们入侵Flash游戏的基于PHP的高分表的最佳方法?
从该链接获得的最重要的想法是:
目的不是要阻止这种情况
攻击;是要增加攻击力度
比真正变得昂贵
擅长游戏并击败它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。