H5积分游戏防作弊

如题

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

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

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


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

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

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

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

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

阅读 15k
4 个回答

我看了一下, 就是给的链接就是重写了h5版的 flappy bird.
并且, 没有发请求.

clipboard.png

clipboard.png

localStorage存储的.

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

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

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

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

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

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

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

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

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

我这边目前也在设计这样的游戏,不过前端H5游戏的确是出现这样的问题,无论你怎么去加密也好,服务端效验也好,也是无济于事的,都会有相应的作弊,只是难度大小而已。post直接去发包结构的会被直接用模拟软件提交过来然后就GG了。

新手上路,请多包涵
  • 多接口联动,包括加密、数据验证
  • 体力、经验验证,消除大量请求接口的用户
  • 服务端只返回ok结果,作弊用户只记录在服务端,混淆作弊者试听
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题