盗号的第二道防线不是登录密码,是交易密码:账号丢了,仓库里那把裁决之杖还在——大额交易与仓库操作要求二级密码,第二把锁让盗号者拿到账号也搬不走资产。
---大额交易的二级验证
local BIG_TRADE_GOLD = 100000
function Trade.execute(actor, targetName, gold, itemIdx)
if gold >= BIG_TRADE_GOLD then
local passed = getplayvar(actor, 2, "TradePassAt")
-- 二级密码 5 分钟内有效
if passed == nil or os.time() - tonumber(passed) > 300 then
sendmsg(actor, 1, "大额交易请先输入交易密码")
Trade.promptSecond(actor)
return false
end
end
-- 正常的交易结算
return Trade.settle(actor, targetName, gold, itemIdx)
end
交易密码的触发线按金额划:单笔 10 万金币以上的交易、仓库的全部取出操作、装备的解除绑定,三类动作要求二级验证。验证通过后的 5 分钟窗口内连续操作免重复输入——频繁大额的行会商人不必每笔都敲,窗口的时效是安全与便利的平衡点。二级密码独立于登录密码,六位数字在仓库页首次设置,忘记只能走客服的实名通道找回。
---校验:错误计数与锁定
function Trade.verifySecond(actor, input)
local fails = tonumber(getplayvar(actor, 2, "TradeFailCnt")) or 0
if fails >= 3 then
sendmsg(actor, 1, "错误次数过多,请 30 分钟后再试")
return false
end
local dk = getplayvar(actor, 2, "TradePinHash")
if Cipher.pbkdf(input, actor:GetUserId(), 500) ~= dk then
setplayvar(actor, "HUMAN", "TradeFailCnt", fails + 1, 1)
sendmsg(actor, 1, "交易密码错误,剩余尝试 " .. (2 - fails) .. " 次")
return false
end
setplayvar(actor, "HUMAN", "TradeFailCnt", 0, 1)
setplayvar(actor, "HUMAN", "TradePassAt", os.time(), 0)
return true
end
二级密码的存储同样是加盐哈希,明文不落任何库。错误的计数三次锁定 30 分钟——盗号者的穷举窗口被锁死,合法玩家输错也有明确的等待提示。验证通过的时间戳走内存不落库,重启后要求重新验证,窗口的有效期宁紧勿松。二级密码与交易的关系是资产分层:小额的自由交易保手感,大额的第二道锁保资产,分层的界限按服务器的经济规模定档。
二级验证的触发量与通过率的监控,触发量骤增提示大额交易的异常潮;锁定的次数统计与客服申诉的关联,锁定误伤的样本回驱动阈值的校准。
验证窗口曾经持久化到库,重启后窗口依然有效,盗号者在窗口期搬空仓库,窗口改内存态。错误计数曾经不锁定只提示,暴力穷举的尝试一小时几千次,锁定的硬闸补上。设置流程曾经不验旧密码,被盗会话直接改掉交易密码,改密必须先验旧密。
二级密码的设置引导放在首次大额交易前,设置的转化靠时机驱动。触发线按服务器物价季度校准,通胀让 10 万不再是门槛时阈值跟进。二级密码与设备绑定的组合:常用设备的验证窗口放宽到 30 分钟,新设备严格到单次。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 沙巴克占领行会坐收税收却只进不出,非占领行会的玩家心里不平衡。税务官玩法把税收做成明账:占领行会对摆摊与…
实战应用:用在哪里 高端玩家婚姻系统只有仪式没有过程,社交绑定缺一个高光事件。比武招亲做成擂台玩法:擂主设擂摆彩头,攻擂者报…
实战应用:用在哪里 开服七日限时礼包发到第六天断了粮,9 月 1 日当天领奖按钮灰的,投诉当天破千。事故根因是一条数字日期循…
实战应用:用在哪里 玩家拔线不退游戏,连接半开着,人不在指令也没有,在线数虚高,容量预案被假数据带着跑。心跳探测给每个在线玩…
实战应用:用在哪里 周三发了合成系统补丁,周四又改强化概率,两条变更叠加后玩家分不清是哪个改出来的。发布日历把全月变更集中排…
实战应用:用在哪里 容量预案需要知道滚动一小时的副本进入峰值,而不是全天累计。滑动窗口用 60 个槽位每槽记一分钟的进入数,…