防止在Javascript游戏上作弊

我目前正在使用JavaScript / JQuery开发游戏。 这是一个简单的砖头破碎机types的游戏保持分数,水平等。我正计划实施一个领导委员会,用户可以提交他们的最终成绩。 我看到的唯一问题是用户在大多数浏览器上使用开发人员工具操纵分数。 我明白,保持事物服务器端将解决大部分这些问题,但是如果有大量的用户,它会打我的服务器很难的请求。 cookies – 轻松改变客户端。 我诚实地摆脱了逻辑思想,以促进公平的游戏,因为总是有人试图欺骗/成为领导者的顶部。 有了这个说法,追踪用户的分数而不给他们改变的方法是一种高效而有效的方式?

通过创build一个只能在服务器端进行计算的公式来混淆他们的分数。

编辑:RobG是正确的,它将需要在客户端计算。

当它在Chrome上启动的时候,我攻击了“愤怒的小鸟”游戏:

http://wesbos.com/all-levels-html5-angry-birds/

然而,他们已经混淆了代码,以至于不可能找出哪个函数计算出了哈希值。

使页面提交完整的游戏重播,而不仅仅是最后的分数。 给定随机种子和逐帧logging的用户input,你的服务器应该能够模拟和重build游戏并validation分数。

很显然,重播也可能是假的,但是这相当于做了这么多的工作(实际上在玩游戏,实际上获得了很好的分数,尽pipe有AI协助的不公平优势,放缓了和其他客户端攻击),工具辅助分数应该配得上排行榜。

你不能保证没有作弊,这是不可能的。 服务器响应请求,就是这样。 它不知道在客户端上运行什么代码,它是什么types的用户代理或环境,甚至不知道它是否运行你的代码或传真。

你可以采取各种步骤使欺骗变得更加困难,但是你不能使它变得不可能。 这些措施(通常被视为“安全”)的成本通常与被保护资产的价值保持平衡。

切勿在客户端上放置任何东西 。 客户掌握在敌人手中。 永远不要忘记这一点。

– 网上世界devise的法则

我有一个想法是使用游戏计时器。 如果用户将得分改变为在已经过去的时间内显然不可能的数量,则拒绝logging该信息。 您可以启动计时器并检查服务器端脚本中的计时器。

现在当然,如果他们只将分数改变几点,这个检查可能会失败,但是,如果他们只增加一个小于影响的数量,那么对你来说也许无关紧要。

base64编码你的JavaScript页面。 这应该阻止智商低于120的人

http://www.opinionatedgeek.com/dotnet/tools/base64encode/

你也可以让排行榜不那么重要,只与“可信”的朋友分享分数。 或者只是让人们在任何社交网站上分享他们的分数。 也许这首先消除了作弊的主要动机。

然后,你总是可以将得分与所收集的统计数据进行隐式比较,以确定是否有人做得好。