1

在编写客户端 (js) 的游戏中,其中有多人游戏元素,例如排行榜。将用户操作记录到带有时间戳的事务日志以验证提交数据的完整性的最佳方式是什么,以及如何验证此日志中的操作?

是否有必要这样做,或者编写一个向服务器提交分数并混淆代码的哈希函数就足以防止这种作弊?

编辑 - 游戏说明:

在这个游戏中,你在一张 50 格长的地图上行走。在每个图块上,您都会遇到敌人/城镇/事件(寻找硬币等)每次到达地图的尽头时,都会加载一个难度稍高的新地图。这个难度与玩家和他从城镇购买的物品一起被保存(在 MYSQL 数据库上使用 PHP)。这些物品的功率整数取决于它们的统计数据(dmg/hp/防御等)。物品的功率被求和并被保存。

功率、阶段(难度)和用户名是前 10 名玩家的排行榜中显示的内容,按最高功率排序。

4

1 回答 1

1

一般来说,没有有效的方法来防止客户端作弊。
就排行榜和发布分数的用户而言,防止作弊的唯一方法是在后端处理数据,或者至少尝试在那里验证数据。

在发送到服务器之前散列数据不会有帮助,因为有人可以在散列之前轻松修改数据。

事务日志无济于事,因为有人可以在将数据提交到事务日志之前轻松修改数据,甚至禁用日志记录。

混淆基本上是通过晦涩难懂的安全性,这将使您的代码更难破解,但绝对不会使其作弊安全。

同样,您永远不能信任来自客户端的任何数据,因此您需要一个后端来控制整个游戏过程或验证数据。

于 2018-08-13T23:40:00.807 回答