完整课程入口:996 全套课程体系 | Lua 学习路径 | 幂尔框架 mirs.cn
账号共享与盗号都有共同特征:登录环境突然变化。设备指纹把客户端环境抽象成一组可比对的维度,登录时与历史记录比对并输出风险分,高风险会话要求二次验证。适用于登录风控、交易二次确认、多开检测。
采集五类维度,按稳定性加权:硬件类(设备型号、屏幕分辨率、CPU 核数)稳定权重高;系统类(操作系统版本、语言区域)稳定;网络类(公网 IP 段)半稳定(换网络会变);行为类(登录时段分布)作为辅助信号;易变类(电池、内存状态)不参与指纹。采集代码在客户端启动时执行一次,随登录请求上报。
服务端为每个账号维护"已知设备指纹表"(最近 5 台)。登录时计算当前指纹与已知指纹的相似度:
local function riskScore(current, known)
local same = 0
for _, dim in ipairs({ "model", "osver", "res", "cpunum", "ipseg" }) do
if current[dim] == known[dim] then same = same + weights[dim] end
end
return 100 - same -- 分数越高风险越大
end
-- 分级处置
if score >= 70 then requireSecondaryVerify() end -- 高风险:短信/二级密码
if score >= 40 then markWatchList(account) end -- 中风险:标记观察
分级处置代替一刀切拒绝:高风险强制二次验证,中风险放行但纳入观察名单,连续异常再升级。
误报主要来自换设备与换网络的真实玩家。三项缓解:验证码通道保持通畅(验证通过即把新指纹加入已知表);新设备登录的首次敏感操作(交易、改密)延迟生效 24 小时;指纹表随验证结果自动更新。数据沉淀方面,风险分分布每天进日报,分数突增的账号聚类分析——批量出现的同分账号通常对应同一个工作室的设备批次。指纹体系上线后,盗号类工单的定性时间从数天缩短到当次登录即可判断。