账号在常用手机之外的环境登录,风控不该直接拦——玩家真的换了手机。设备指纹方案:登录记录设备特征,陌生设备放行进入但交易延迟两小时,给真正的盗号者竖一道时间墙。
登录触发里提取设备特征串,与历史指纹比对,陌生指纹登记并打延迟标记。actor是字符串,转对象后写变量。
function onLoginCheck(actor, fp)
local player = class(actor)
local known = getplayvar(actor, 2, "FP_" .. fp)
if known == 1 then return end
local cnt = tonumber(getplayvar(actor, 2, "FP_CNT") or "0")
if cnt < 3 then
setplayvar(actor, "HUMAN", "FP_" .. fp, 1, 1)
setplayvar(actor, "HUMAN", "FP_CNT", cnt + 1, 1)
sendmail(actor, 0, "新设备登录提醒", "如非本人操作请立即改密", "")
else
setplayvar(actor, "HUMAN", "TRADE_DELAY", os.time() + 7200, 1)
sendmsg(actor, 0, "新设备已登录,交易功能将在2小时后开启")
end
end
交易类接口统一校验延迟标记,到期自动解除,改密成功立即解除。
function canTradeNow(actor)
local player = class(actor)
local untilTs = tonumber(getplayvar(actor, 2, "TRADE_DELAY") or "0")
if untilTs > os.time() then
sendmsg(actor, 0, "新设备保护中,剩余" .. math.ceil((untilTs - os.time()) / 60) .. "分钟")
return false
end
return true
end
测试三类指纹:老设备直通、新设备前三台登记、第四台进延迟,路径全绿。线上统计延迟标记触发率,超过千分之五说明指纹特征不稳定,先调特征再查盗号。
指纹串直接拼进变量键有长度风险,指纹先做摘要缩短到固定长度,键名超长会被截断。改密立即解除延迟的入口要验证改密动作本身通过旧设备或邮箱验证,否则盗号者改密自解延迟。三台设备上限对多机玩家偏紧,超限后走申诉通道扩容,别让正常玩家被锁死在保护里。指纹特征要挑稳定字段,机型与系统版本组合,分辨率这类易变字段掺进去会天天误报新设备。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…