javascript - H5积分游戏防作弊

 黄承念63772 发布于 2022-11-11 21:20

如题

对于现在大部分的积分性质的h5游戏,比如:阿里的这款demo,Flappy Bird

在游戏结束的时候,需要发送请求到后端,以此来记录玩家的分数,展示排行榜等信息。

但是,目前h5游戏对于用户来说,既是开源的,那么,用户作弊的门槛就会特别低,即使服务端做再多的验证,也是无济于事。不知道,此类问题是否有相对完美的解决方案?


综述:
感谢两位楼主的解惑,以及二楼精彩的评论。的确,前端任何加密都是增加破解成本而已。

  1. 我们可以不仅对请求参数各种形式的加密,对关键的js代码也做混淆加密,增加破解门槛。

  2. 根据防止表单重复提交的原理,生成唯一sign,防止不玩游戏直接通过链接提交。

  3. 在游戏开始的时候,发送一个请求,在服务端记录当前时间或者其它一些标识,游戏结束的时候,根据时间或者当前的标识去做逻辑判断,比如,类似这个游戏,分数和时间是有数学关系的。

  4. 对于一定范围之后的分数,做更为复杂的验证,分析用户行为等等。

2 个回答
  • 把游戏逻辑放在服务器实现,前端只是发送操作命令和根据服务器计算结果更新本地状态和画面。

    例如Flappy Bird,服务器记录了用户状态(小鸟位置、水管位置、加速度),用户发一个“跳”的命令,服务器收到“跳”命令后验证并修改状态,把状态发会给前端,前端更新本地状态和画面。

    这样就能让作弊的门槛(和开发成本)高很多了。

    2022-11-12 01:52 回答
  • 我看了一下, 就是给的链接就是重写了h5版的 flappy bird.
    并且, 没有发请求.

    localStorage存储的.

    因为这个游戏本身就是这种需求.
    上述就是为了证明这个demo与题主的需求不同

    题主的需求是为了生成排行榜, 在不同端post/get. 所以需要后台支撑.
    同时发送请求时容易被恶意调用, 导致排行榜的真实性被破坏.

    根据这个条件, 我想到了 2个办法:

    1. 首先h5(游戏)页面不可能脱离微信, 毕竟是当前国内最大的社交平台.
      甚至可以完全依赖微信, 公众号开发(估计会有), 去验证是否在微信中浏览, 如果不是, 直接跳转到中转页, 干脆不让用户玩.这个功能, 完全可以自己模拟出来.

    2. 在请求中加密.
      自己制定一套加密方案, 比如生成一个排行数据, 在前端加密 (可以多加密几层, 但是要做到不破坏内容, 即可逆), 到后台再解密.

    补充一点, 就如下放评论中@hzc说的, 前端任何加密都是增加破解成本而已.

    2022-11-12 01:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有