排行榜怎么防止恶意用户刷榜?

2022-01-06 08:39:49 +08:00
 jsdi
业务需求是前端有一个网页小游戏,通过小游戏会获得一个分数,这个分数要提交到后端进行排序返回小游戏的分数排行榜。如何不使用复杂的加密算法简单的实现这个需求呢?

刚开始是用 base64 编码,不至于那么裸奔。后来导师让我用 referer 请求头实现,只有是公司域名才能访问此接口。但是 google 发现 referer 也是可以伪造的,而且使用 referer 测试好像没法单独进行接口测试。

请问真的可以使用 referer 实现吗?有没有其他实现方式呢?
4419 次点击
所在节点    问与答
35 条回复
maplerecall
2022-01-06 11:09:54 +08:00
没用的,referer 一样可以十分简单的伪造。除非游戏主要逻辑在服务端,基本没有什么好方法能够限制客户端作弊行为,无论 web 还是原生客户端。
ch2
2022-01-06 12:11:15 +08:00
无法避免
mxT52CRuqR6o5
2022-01-06 12:18:14 +08:00
倒是确实直接把逻辑扔 wasm 里相比在 js 层搞各种东西破解难度要大得多
lysS
2022-01-06 12:20:44 +08:00
@jsdi TLS 是防止用户访问了伪造的服务器,而且你这是网页版的,做什么都不能防止用户给你发假数据。
Privileges
2022-01-06 15:14:23 +08:00
Referer 伪造成本太低了。。。
oneisall8955
2022-01-06 16:59:19 +08:00
把菜鸟用户拦截就行了,前端代码混淆,前端上传分数接口数据非对称加密
final7genesis
2022-01-06 17:03:14 +08:00
@libook 感觉这个方案最靠谱些
chashao
2022-01-06 19:00:35 +08:00
实时上传玩家操作,在服务端进行玩法逻辑计算以及计算分数
t6attack
2022-01-06 19:05:22 +08:00
终极解决方法只有一个:服务端运算。
t6attack
2022-01-06 19:34:34 +08:00
打个形象的比方:打完游戏,分数由客户机一次提交,这就好比考完试,让学生自己判卷,然后把分数报上来。也不检查卷纸。那么这个分数排行榜?只能用作参考。不能认真。
省时点的逻辑,就是优化排行榜:加个简单判断,把排行榜里离谱的分数过滤掉。再把短时间取得不可能分数的过滤掉。这样,排行榜看起来就能正常一点。

为什么 PC 上外挂很多,游戏机上相对较少?因为 PC 是全功能生产工具,傻瓜式的内存修改器就 N 多种。
不管你提交过程怎么加密,怎么防伪造。这个游戏分数是一定存在某段内存里的。我用 CE 修改器定位到分数的内存地址,做一次乘方。然后游戏结束,这个离谱的分数,经过你那复杂的加密逻辑,顺利的通过服务端,登上排行榜。你辛苦编写的加密逻辑,全都变成了无用功。
你的程序运行在我的地盘,我对它有上帝视角。你让我自己判卷,我想判多少分就判多少分。就是这么个逻辑。
bellx
2022-01-06 20:25:32 +08:00
楼上也说到了,最终解就是服务端计算,前端做加密只是破解难易的区别而已
jsdi
2022-01-06 22:10:26 +08:00
@oneisall8955 非对称加密有用吗?公钥放在客户端,用户通过翻 js 文件就可以看到加密逻辑,然后他也可以把加完密的离谱分数提交到后端,后端是没法判断的
jsdi
2022-01-06 22:12:08 +08:00
@t6attack 确实 前端还是太裸奔了阿 底裤都让人看光了
lawler
2022-01-07 08:07:23 +08:00
就冲 ”后来导师让我用 referer 请求头实现“ 这句话。
游戏内容都用不着抓包这么啰嗦的手法。

请问真的可以使用 referer 实现吗?
答:可以,但只能避免试图刷榜中的很小一部分。
有没有其他实现方式呢?
答:很多并不能完全阻断这种行为。所以归纳下来无非是三种方向,加密(数据、协议等方式方法尽量复杂)、记录(操作日志、录像录屏、实时数据流等尽可能详尽可追溯)和加密结合记录。
oneisall8955
2022-01-07 09:46:43 +08:00
@jsdi 防菜鸟而已,一般的菜鸟看到接口要上传加密的数据就不想翻前端源码,再有混淆了前端代码也不太好找到密钥和加密算法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826487

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX