财富榜把身家排给全服看,头名成了盗号与诈骗的精准名单。脱敏策略让上榜仍风光、数字不可仿:金额只留量级、名字部分打码,前四十名统一处理,隐私与炫耀两不误。
金额按量级显示,十万以下显示万级整数,以上显示到十万位;名字保留姓氏与尾字,中间打星。
local function maskGold(gold)
if gold >= 100000 then
return math.floor(gold / 100000) * 10 .. "万+"
end
return math.floor(gold / 10000) .. "万"
end
local function maskName(name)
if #name <= 4 then return name end
return string.sub(name, 1, 3) .. "***"
end
榜单下发前统一走脱敏出口,任何旁路直发原始值都算违规,豁免名单只有玩家本人查看自己的完整数据。
local function buildRank(list, viewer)
local out = {}
for rank, rec in ipairs(list) do
if rec.name == viewer then
out[rank] = { rank = rank, name = rec.name, gold = rec.gold }
else
out[rank] = { rank = rank, name = maskName(rec.name), gold = maskGold(rec.gold) }
end
end
return out
end
上线前拉取榜单接口抓包,确认全服可见字段无一原始值泄露;本人自查路径正常返回全量。监控榜单数据的外发通道数量,新增通道必须接入脱敏出口,旁路即漏洞。
string.sub按字节切,汉字三字节,切在半个汉字上显示乱码,按字节宽度3对齐切分。脱敏只做展示层,底层接口返回原始值时,抓包照样拿到全量,敏感字段在数据出口就要剪裁。本人豁免的判定以服务端会话为准,前端传名字自称本人即可绕过,身份判定绝不信客户端。量级显示的取整方向要统一向下,向上取整会虚报身家,头名玩家被按虚数勒索的案例真实发生过。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…