给定客户端游戏(让我们称之为游戏X)和存储高分的服务器端数据库如何在游戏结束条件之后以一种只有在游戏中才能完成的方式将高分安全地汇总到服务器实际上是玩过(因此防止劫持后).
鉴于此问题,我在这里提出了一些想法
**在游戏开始时发送一个会话ID,该会话ID在给定的时间后到期,然后发送到服务器进行验证
问题是,这可以通过请求启动ID然后只是伪造分数来轻松利用
**游戏中发布到服务器的检查点,以验证此人是否正在玩游戏
再一次,这可以通过一些狡猾的脚本来合成
上传游戏重播并验证服务器上重播的分数.当然,这仅适用于您的游戏支持重放的情况.
至少要创建一个关于正在发生的事情的粗略记录并应用一些合理性检查.
您还应该添加一些游戏一致性检查.否则我将使用像ArtMoney这样的工具并在游戏中改变分数.
但最终,如果用户编写机器人,它会变得非常困难.
您无法阻止客户端被操纵.它由播放器控制,他可以对客户端应用程序逻辑进行微妙的更改,这些更改在服务器端无法检测到.我所知道的唯一解决方案是将所有用户操作发送到服务器(在游戏结束时或在用户正在播放时连续发送)并让服务器验证它们(重新计算得分).如果动作导致用户声称已达到的分数,则接受分数.如果操作与分数不匹配 - 拒绝.生成逻辑上一致的虚假动作将更加困难.然而,它不会阻止所有作弊技术(谷歌的"瞄准代理",类似的东西也可能在你的游戏中).