【问题标题】:Prevent Cheating on Javascript Game防止在 Javascript 游戏中作弊
【发布时间】:2011-08-24 06:02:16
【问题描述】:

我目前正在使用 JavaScript/JQuery 开发游戏。这是一种简单的破砖游戏类型,可以保持得分、关卡等。我计划实施一个排行榜,用户可以将他们的最终得分提交给该排行榜。我看到的唯一问题是用户在大多数浏览器上使用开发人员工具来操纵分数。我知道将事情保留在服务器端将解决大多数这些问题,但是如果有大量用户,它会对我的服务器造成严重的请求。 Cookies - 轻松更改客户端。老实说,我没有合乎逻辑的想法来促进公平游戏,因为总是有人试图作弊/成为排行榜的佼佼者。话虽如此,在不授予用户更改权限的情况下跟踪用户分数的高效且有效的方法是什么?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

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

很明显,回放也可以伪造,但它需要做很多工作(实际上玩游戏并获得好分数,尽管 AI 辅助的不公平优势、减慢速度和其他客户端黑客行为)该工具-辅助得分应该在排行榜上。

【讨论】:

  • 这是最有效的解决方案,但不是最简单的。
【解决方案2】:

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

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

我在 chrome 上启动时破解了愤怒的小鸟游戏:

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

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

【讨论】:

  • 代码在客户端运行,因此无论发生什么编码都在客户端上,并且可以被欺骗。不同的方法或多或少会增加难度。
  • @RobG 对于一款益智游戏,有机会让欺骗分数与游戏本身一样困难。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    当然,如果他们仅将分数更改为几分,则此检查可能会失败,但是,如果他们仅添加影响较小的数量,那么对您来说可能就没那么重要了吗?

    【讨论】:

    • 这个想法很好,我喜欢。可以采取这样的各种措施,让作弊者很难破解。
    【解决方案5】:

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

    -- The Laws of Online World Design

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

      • 嗯.. 但是你也消除了喜欢竞争的诚实玩家的动力。
      【解决方案7】:

      Base64 对您的 javascript 页面进行编码。这应该会阻止一些人。

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

      【讨论】:

      • 我认为您不需要高智商来安装由其他人(无论智商如何)编写的插件,它可以发送您想要的任何分数。
      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 2022-10-15
      • 2016-08-22
      • 2012-01-06
      • 2010-10-31
      • 1970-01-01
      • 2012-08-20
      • 2017-04-20
      相关资源
      最近更新 更多