如何防范恶意用户滥用未认证开放API,避免接口被恶意刷spam攻击?
适配小型项目的轻量API防滥用方案
请求方法合规化修正
首先将原GET类型的提交接口改为POST,得分、用户名等参数放在请求体而非URL中。GET请求的参数会默认留存于服务器日志、代理节点记录中,且恶意用户可以直接通过浏览器地址栏、基础HTTP请求脚本批量调用,改为POST后可以直接过滤掉最低级的批量扫描、重放攻击,实现成本为0。简单签名校验
前后端预先约定一个仅双方知晓的固定混淆字符串,前端提交得分时,将用户名、得分、当前10位时间戳与混淆字符串拼接后计算MD5哈希值,将哈希值、时间戳随业务参数一同传给后端。
后端收到请求后先校验时间戳与当前服务器时间差是否在5分钟以内,超时直接拒绝;再用相同规则计算哈希值,与前端传的哈希比对,不一致直接拦截。该方案可以挡掉90%只会抓包重放的恶意用户,仅需要几十行代码即可实现,不需要额外存储资源。即使恶意用户反编译前端JS拿到混淆规则,也需要额外调整脚本逻辑,大幅提高攻击门槛。业务规则校验
结合实际业务场景添加低成本校验逻辑:- 校验得分合理性:如果游戏单局理论最高得分为10000分,直接过滤掉超过阈值的提交请求
- 校验提交频率:比如单局游戏最短时长为2分钟,同一个来源1分钟内提交超过3次得分直接拒绝
这类逻辑完全适配业务场景,实现无额外成本,能过滤掉绝大多数乱改得分、批量刷分的请求。
无状态临时限流
用内存LRU缓存或者带自动过期的键值存储实现限流,比如限制同一个IP每5分钟最多提交3次得分请求,IP记录1小时后自动清除,不需要长期留存用户IP数据,不会触发隐私合规问题,实现难度低,对正常用户完全无感知。服务端得分兜底计算
如果是网页类游戏,可以把用户局内关键操作(比如通关时间、获取道具的记录)同步给后端,后端直接根据操作序列计算最终得分,前端提交的得分仅做校验参考,不一致直接拒绝,从根源上杜绝恶意改分的可能,小体量游戏的操作逻辑简单,该方案开发成本极低。
如果是黑客松或者hobby类小型项目,组合使用前三个方案即可拦截99%的基础恶意攻击,整体新增代码量不超过100行,不需要接入第三方服务,也不需要额外提高用户使用门槛。
内容的提问来源于stack exchange,提问作者Husky
相关产品推荐
相关产品推荐

