由于最近的浏览器增强功能,使用canvas和javascript开发游戏已成为一个不错的选择,但现在代码很容易访问,只需写
javascript:score=99999
Run Code Online (Sandbox Code Playgroud)
要么
javascript:lives=99
Run Code Online (Sandbox Code Playgroud)
将破坏游戏目标.
我知道有一些服务器端检查可以做一些事情,但我更愿意访问服务器只是为了存储玩家统计数据,或者甚至在大多数情况下只有客户端.
我想知道至少是否有一些最好的实践开始.
(使用不那么明显的变量名称是一个开始,但还不够)
-添加-
感谢您的回复,我希望改进客户端代码,足以阻止"随意黑客",但仍然保持代码尽可能干净.任何真正想要破解它的人都会成功,即使是在服务器端检查,正如我在许多Flash游戏中看到的那样.
Ric*_*haw 11
一种方法是将每次移动的记录发送到服务器,然后验证这些移动是否会获得该分数.
这对于像纸牌或国际象棋这样的游戏来说很容易,但对于更复杂的游戏来说却并非如此.
一个更简单的版本是计算出每秒或每次移动可以获得的最大点数,然后验证分数是否不高于理论最大值.
另一种方法是将每个移动记录在服务器上,并在那里总计得分.这意味着在游戏结束时没有发送,并且这些变量仅用于显示,而不是真实分数.
离线游戏可能会出现在高分榜上,也可能表明他们未经过验证.
值得指出的是,对于任何javascript调试器,例如Webkit中的Inspector,Firefox上的Firebug或Opera上的Dragonfly,即使您的代码处于闭包状态,也很容易在客户端更改变量的值.任何形式的混淆都是毫无意义的,因为在玩游戏时,很容易看到哪个变量对应于得分,并且可以简单地从代码中读出任何编码或其他任何内容.
我会说我在评论时所说的内容:将所有源代码放入(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)
Run Code Online (Sandbox Code Playgroud)
当我深入了解Les Paul Google Doodle时,我'学会了'这种技巧.
为了更安全(不完全安全,但它会惹恼一些黑客),通过YUI压缩器或打包器之类的工具压缩和混淆你的脚本.
| 归档时间: |
|
| 查看次数: |
5985 次 |
| 最近记录: |