号码回收再发之后:把短信验证码当强凭证的那些年要还的账

一、这笔长期债务从哪来
用手机号认人,是行业很早定下的一个临时约定——号码发给谁,就默认这个人是谁。号码会停用、会回收、会重新投放进池子,这个约定于是从便利变成了错误来源。工信部信管函〔2026〕120 号这份季度电信服务质量通告里提到”二次号码焕新”服务在扩大接入范围,帮助用户一键解绑历史互联网应用账号。这个服务本身的存在就说明,账已经欠在系统外面,需要一套公共机制来补。据通告口径,这类解绑服务已覆盖两百多款常用应用、累计受理的解绑申请数以亿计;我们引用这个规模只为说明问题有多普遍,它不是本篇任何论证的依据。
对任何用手机号认人的系统,风险有三种典型表现。一是新机主拿到号登录后,看到的是旧机主的账号入口或历史提示,隐私直接串了线。二是旧机主想重新注册或找回,被”号码已注册”挡住,号在他手上却认不回自己。三是攻击者把”刚放出的新号”当成进入他人账号的通道,配合撞库与找回密码流程——把验证码发到攻击者控制的号码,等于递出去一把钥匙。对做 SaaS 与云服务账号体系的我们来说,这三种都不是别人的事,是自家库里已经躺着的隐患。之所以叫债务,是因为它不会自己到期:只要还用”号码等于人”这套约定在认账号,每放出一次回收号,就多欠一笔,越早补判定与降级,将来一次性清理的成本越低。
二、判定要素不能单条下结论
要区分”新机主”与”原机主换了绑定的误判”,靠单条信号一定会翻车,得把几类要素组合起来看。可用的要素有这么几项:
- 该号码的在网时长与大致放号时间,指向这是新号还是老号;
- 这个号码第一次出现在本系统的时刻;
- 登录设备指纹与地理轨迹是否发生突然断裂;
- 绑定邮箱、实名要素、支付要素是否在同一时间窗被集体变更;
- 关联账号此前是否长期沉默,又被一次操作突然唤醒。
组合才有指向。”号码新、设备全新、历史要素全变”更像新机主;”号码看似新,但设备与轨迹延续”更像原号主被误判。我们主张把这套组合写成可判定的规则,落到字段与阈值上,而不是交给风控人员凭感觉,否则同一种情形在两个值班员手里会得出两种结论。这些要素不是凭空来的,要落到能取到的数据上:在网时长与放号时间可以从号码段的批次信号粗粒度推断,本系统的首次出现时刻从账号主表的创建时间取,设备与轨迹的延续性从登录日志和设备指纹库比对,要素是否集体变更从绑定变更流水里查,长期沉默则由两次有效操作的时间间隔判定。取不到某一维时,宁可降到”追加核验”这一档,也不要因为缺数据就直接放行或者直接拒绝。
三、分级处置四档与各自的误伤方向
判出来之后怎么处置,我们倾向分四档,每一档都有代价,关键是想清楚误伤偏向哪一边。
| 档位 | 动作 | 用户体验代价 | 误伤偏向 |
|---|---|---|---|
| 正常通过 | 按常规登录放行 | 无 | 可能放新机主误入旧账号 |
| 追加多要素核验 | 要求邮箱、实名或人脸任一类二次确认 | 多一步操作 | 真机主嫌麻烦 |
| 判为新机主走解绑与找回 | 触发解绑历史绑定并引导账号找回 | 旧机主要重新证明身份 | 误判时打扰旧机主 |
| 拒绝并转人工申诉 | 阻断并要求人工提交材料 | 最重 | 边缘用户被卡住 |
一条原则:判成”新号”的门槛要比”正常放行”更高,误伤要尽量偏向”多问一句”而不是”直接放过”。放过的代价落在别人隐私上,多问的代价只落在一点点麻烦上,两者不对等。
四、把短信验证码从强凭证降级
真正要改的,是把短信验证码从”强凭证”的位置上拿下来。凡是敏感操作——改绑手机、提现、注销账号、导出个人数据——都不能只凭一条短信码就放行,必须叠加第二类因子。落地方法是把”过去仅凭短信码就能完成的事”逐条列出来,再逐项降级:读取类先收紧范围,修改类加一次二次确认,转钱或删数据类走多因子并设延迟生效,留出撤回窗口。
举例来说,改绑手机号应当是”原号码短信码 + 绑定邮箱链接或一次人脸核验”;账户提现是”登录态内操作 + 支付密码 + 延迟到账”;导出个人数据是”二次确认 + 单次数量限额 + 导出留痕”。把这些写清楚之后,谁都能照着核某条链路是不是还停在只认一条短信码的状态。我们给客户的交付物通常就是这张”操作 × 所需因子”的对照表,而不是笼统一句”加强验证”。
五、对接解绑、数据权利与存量治理
系统侧还要补三块。第一块是与解绑服务的对接位置:接入解绑查询或通知的接口位,把结果写进账号状态机时,明确记在哪个字段、要不要触发一次强制重绑、绑定关系多久复核一次。复核节奏不必一刀切,可以按登录风险触发,也可以给长期沉默后又活跃的账号设一个到期复核,关键是这个周期要写成配置而不是靠人记得去查。第二块是数据权利的工程改动:查阅、复制、撤回同意这三类请求要有可执行的接口与工单状态,撤回同意之后哪些数据处理必须停下来,要能在系统里落到可关闭的开关。通告里提到针对新型应用开展端云协同场景下的个人信息保护测评,对我们的启发是把字段分成”必须留在端侧”与”允许上行、上行后可删”两类,后者要能真正删干净,而不是只删一条索引、备份与缓存里还留着原件。第三块是注册流程的存量治理:批量识别历史上”一号多人”的账号,配好通知模板与申诉入口,并明确保留期与到期后的合规销毁路径——存量问题不会因为不处理就自己消失,只会越积越难分。
六、留证字段与三张可交付清单
最后一块是留证。判定时用到的要素、命中的规则、给出的处置结论、复核这件事的人,这四样都要留在记录里——用户投诉时要能解释,监管检查时要能出示。留不住证据的判定,等于没做过。具体到字段形态,一次判定至少要留下:触发时间、被判定的号码与本系统账号标识、各要素当时的取值、命中的规则编号、落入的处置档位、执行结果,以及是否需要人工复核与复核人。这些字段平时看着冗余,一旦有用户来问”我明明是号主为什么被卡”,它们就是唯一能说清楚的东西。
我们把这些沉淀为三件核心交付物:一张二次号码判定要素与分级处置表(要素 × 组合条件 × 档位)、一份敏感操作多因子清单(操作 × 所需因子 × 生效延迟)、一组解绑服务对接的接口位与账号状态字段。洹拓把它做成可复用的风控配置,是为了让”号码回池再发”这件事不再是每次出事才临时拍板,而是有规则、有留证、可复核的常态处置。号码终究会回到池子里,与其等它砸到自己的账号体系,不如提前把判定与降级补上。