我目前正在使用JavaScript / JQuery开发游戏。这是一个简单的破砖机类型的游戏保持得分,水平等。我正计划实施一个用户可以提交最终得分的排行榜。我看到的唯一问题是用户在大多数浏览器上使用开发人员工具操作乐谱。我知道保持服务器端将解决大多数这些问题,但是如果用户数量很大,它会在请求时严重打击我的服务器。 Cookies - 轻松改变客户端。老实说,我不赞成推广公平游戏的合乎逻辑的想法,因为总有人试图欺骗/成为排行榜的顶级人物。有了这个说法,什么是一种有效和有效的方法来跟踪用户的分数而不让他们改变它?
通过创建只能在服务器端计算的等式来模糊他们的分数。
编辑:RobG是正确的,因为它需要在客户端计算。
我在Chrome上推出了愤怒的小鸟游戏:
http://wesbos.com/all-levels-html5-angry-birds/
但是,他们已经对代码进行了大量混淆,以至于无法确定哪个函数计算出哈希值。
使页面提交完整的游戏重播,而不仅仅是最终得分。给定随机种子和用户输入的逐帧记录,您的服务器应该能够模拟和重建游戏并验证分数。
显然,重播也可以伪造,但这相当于工作(实际上玩游戏并实际得到一个好成绩,虽然有人工智能援助的不公平优势,减速和其他客户黑客),工具辅助分数应该是值得进入排行榜。
你无法保证不作弊,这是不可能的。服务器响应请求,就是这样。它不知道客户端上运行的代码,用户代理或环境的类型,甚至是运行代码还是传真。
你可以采取各种措施使欺骗更加困难,但你不能让它变得不可能。这些措施的成本(通常被视为“安全”)通常与受保护资产的价值相平衡。
永远不要 什么 在客户端上。客户掌握在手中
敌人。永远不要忘记这一点。
- 网络世界设计的规律
我的想法是使用游戏计时器。如果用户将分数更改为在给定已经过的时间量的情况下显然不可能的量,则拒绝记录该信息。您可以启动计时器并检查服务器端脚本中的计时器。
当然,如果他们只将分数改变了几分,这种检查可能会失败,但是,如果他们只增加一个不足以影响的数量,那么对你来说也许并不重要?
您还可以通过仅与“可信”朋友分享分数来降低排行榜的重要性。或者只是让人们在任何社交网站上分享他们的分数。
也许这首先消除了作弊的主要动机。
然后,您可以随时将得分隐含地与您收集的统计数据进行比较,以判断某人是否做得好。