用于客户端游戏逻辑操作的Webapp安全性

时间:2011-08-27 04:32:27

标签: javascript ajax html5 security

我正在开发一款浏览器内游戏,利用HTML5中提供的Canvas。但是,我意识到我的系统存在很大的漏洞。游戏得分和其他有关游戏的统计数据在客户端用Javascript计算,然后提交给服务器进行存储,并通过XMLHTTPRequest与其他玩家进行比较。这显然使统计数据暴露于操纵和潜在的欺骗行为。

由于延迟问题,我担心将这些问题移到服务器端。我希望时机能够接近。

还有其他智能方法可以解决这个问题吗?我想,随着HTML5的增长,越来越多的游戏会处理这个问题。

4 个答案:

答案 0 :(得分:1)

不是真的。此方案中的服务器只不过是信任客户端的数据库。你可以混淆,但人们很容易弄清楚你的api在做什么。这对于所有独立游戏来说都是一个难以解决的问题,这就是为什么暴雪让Diablo3成为客户端 - 服务器游戏的原因。它是一个javascript游戏,这使得它更加透明,人们可以轻松调试和利用。

答案 1 :(得分:0)

为什么不在每次客户得分时将数据发送到服务器,然后保持本地得分。

答案 2 :(得分:0)

不幸的是,你无能为力。缩小/混淆代码始终是一个不错的选择。我不完全确定,但我认为将你的代码放在

(function() { /* code */ })();

应该保护用户编辑的任何变量(除非你将它们附加到像window这样的对象上)。但是用户仍然可以利用您的ajax调用并将他们想要的任何分数发送到服务器。只是,永远不要相信客户端所做的任何事情。验证服务器端的所有内容。

编辑:我想到的另一件事:可能生成代码服务器端,并将其发送到浏览器。然后每个ajax-call发送该代码以验证它是你而不是某个恶意用户。

答案 3 :(得分:0)

当您必须信任来自客户端的数据时,无法实现100%的安全性。但是,您可以通过混淆js代码以及从客户端发送的数据来使作弊变得困难。

我有一个类似于gviews评论的想法。

在服务器上,您应该通过批量更新跟踪游戏的玩家流程,您将定期在某个时间间隔内从客户端发送...玩家将无法在延迟中识别它,您将拥有该工具检测明显的骗子。你知道玩家游戏的起点,所以你可以从一开始就轻松发现作弊行为。

另外,我建议使用一些检查点来检查客户端上游戏的真实状态和服务器上的状态。 (如果作弊者仅用xhr更改服务器更新,则客户端的状态不会改变。)

有很多方法可以让它更难作弊,而且每场比赛都是个人的......没有任何标准可以解决这一切。