防止Javascript游戏作弊

时间:2011-08-24 06:02:16

标签: javascript jquery

我目前正在使用JavaScript / JQuery开发游戏。这是一个简单的破砖机类型的游戏保持得分,水平等。我正计划实施一个用户可以提交最终得分的排行榜。我看到的唯一问题是用户在大多数浏览器上使用开发人员工具操纵乐谱。我知道保留服务器端将解决大多数这些问题,但是如果用户数量很大,它会因请求而严重打击我的服务器。 Cookies - 轻松改变客户端。老实说,我不赞成推广公平游戏的合乎逻辑的想法,因为总有人试图欺骗/成为排行榜的榜首。有了这个说法,什么是一种有效且有效的方法来跟踪用户的分数而不让他们更改它?

7 个答案:

答案 0 :(得分:8)

让页面提交完整的游戏重播,而不仅仅是最终得分。给定随机种子和用户输入的逐帧记录,您的服务器应该能够模拟和重建游戏并验证分数。

显然,重播也可以伪造,但这相当于工作(实际上玩游戏并实际得到一个好成绩,虽然有人工智能援助的不公平优势,减速和其他客户黑客)这个工具 - 辅助分数应该在排行榜中。

答案 1 :(得分:5)

通过创建只能在服务器端计算的等式来模糊他们的分数。

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

我在Chrome上推出了愤怒的小鸟游戏:

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

然而,他们已经对代码进行了混淆,以至于无法弄清楚哪个函数计算出哈希值。

答案 2 :(得分:2)

你无法保证不作弊,这是不可能的。服务器响应请求,就是这样。它不知道客户端上运行的代码,用户代理或环境的类型,甚至是运行代码还是传真。

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

答案 3 :(得分:1)

  

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

- The Laws of Online World Design

答案 4 :(得分:1)

我的想法是使用游戏计时器。如果用户将分数更改为在给定已经过的时间量的情况下显然不可能的量,则拒绝记录该信息。您可以启动计时器并检查服务器端脚本中的计时器。

现在当然如果他们只将分数改为几分,那么这种检查可能会失败,但是,如果他们只增加一个不足以影响的数量,那么对你来说也许并不重要吗?

答案 5 :(得分:0)

您还可以通过仅与“可信”朋友分享分数来降低排行榜的重要性。或者只是让人们在任何社交网站上分享他们的分数。 也许这首先消除了作弊的主要动机。

然后,您可以随时将得分隐含地与您收集的统计数据进行比较,以判断某人是否做得好。

答案 6 :(得分:-1)

base64编码您的javascript页面。这应该可以阻止智商低于120的人

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