登录接口是爆破攻击的主入口:脚本批量尝试"常见弱口令 + 已泄露密码库",命中一个账号就是一次资产风险。防爆破不是简单地"错五次锁定",过严会误伤真实玩家,过松形同虚设。三层设计(延迟、锁定、验证码)兼顾安全与体验。
每次失败后,该账号的下一次尝试延迟翻倍:第 1 次失败后等 1 秒、第 2 次 2 秒、第 4 次 16 秒、第 8 次起固定 5 分钟。延迟在服务器端执行(返回前 sleep 或延迟响应),攻击者的爆破速率被压到不可用。延迟实现用非阻塞定时器,不能在处理线程里直接 sleep(会拖住整个服务)。
local fail = failTable[account] or { n = 0, t = os.time() }
if fail.n >= 10 and os.time() - fail.t < 900 then
return reject("尝试过于频繁,请15分钟后再试")
end
-- 校验密码失败:
fail.n = fail.n + 1
fail.t = os.time()
双维设计防两种变体:只按账号锁定会被攻击者分散目标(撞库多个账号各试 9 次);只按 IP 锁定会被代理池绕过。账号维度 10 次/15 分钟,IP 维度 50 次/15 分钟,两者独立计数。锁定解除用时间自然过期,不设手动解锁(客服解锁流程反而被攻击者社工利用)。
失败满 3 次后,登录界面强制图形验证码(或滑动验证),人机成本大幅上升。验证码校验必须服务端生成与服务端判定,前端的任何验证都可被绕过。
某 996 服上线三层方案后,爆破尝试的成功率归零,正常玩家误触锁定的比例约 0.03%(输错 10 次以上的真实玩家)。监控指标两条:全网失败尝试曲线(突增即有爆破行为)与被锁定账号清单(区分攻击与真实用户求助)。防爆破的参数(次数、窗口)每季度结合监控数据复核一次。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 排行榜卡死拖累登录、成就推送挤占带宽,这些非核心功能出问题时最需要的是一个总闸。服务降级预案定义了核心链…
实战应用:用在哪里 单件装备的属性提升有限,套装共鸣让多件装备产生化学反应:穿戴同系三件以上触发共鸣属性,五件触发全局光环。…
实战应用:用在哪里 同一账号在两台设备同时在线,一台打怪一台交易,是盗号者测试密码后的标准动作。多设备在线检测在登录环节检查…
实战应用:用在哪里 老服合并、机房迁移、数据分库改造,都涉及角色数据的批量搬家。数据迁移的核心是搬运过程中不断服、不丢数据、…
实战应用:用在哪里 沙影之路的暗之Boss是行会实力的试金石:真身与三个镜像随机分布在四个祭坛,只有击杀真身才有掉落,镜像被…
实战应用:用在哪里 攻城战最容易变成人海推门的无脑玩法。攻城拔寨将城门攻坚设计为三线战术:正面强攻吸引火力、侧翼工程车破城、…