别砌墙,要筛子:vibe 项目的注册防刷与人机验证实战指南
注册防刷不是一道墙,而是一套分层筛子。本文讲机器人类型、摩擦阶梯、验证代价清单、新号受限与清理链路。

先说清楚:以下示例人物、产品名和数据全部为虚构,是为讲清楚方法而编的例子,不是真实产品、不是真实用户案例。方法本身是通用的,数字是举例用的标尺,不是任何产品的实测结果。
很多 vibe 项目第一次被机器人盯上时,作者的第一反应是“加一个验证码,越难越好”。结果往往是:机器人照常用,真实用户先被难住了。我的判断是:注册防刷不是一道墙,而是一套分层筛子——先用不打扰人的信号筛掉绝大多数机器流量,只对真正可疑的那一小撮人才上需要动手的验证。顺序搞反了,你防住的不是机器人,而是自己的增长。更糟的是,防刷一旦做错,误伤的全是真实用户:校园网、公司出口、合租宽带后面的一群真人,可能因为共用一个 IP 就被你一锅端。
先认清对手:注册机器人不是一种东西
“机器人”这个词太笼统,不同的机器人要的东西完全不一样,防法也不一样。第一种是批量注册号:一次注册几千个账号,留着以后发广告、刷评论、薅邀请奖励。第二种是试用滥用号:反复用新邮箱、新手机号领免费额度,转手倒卖。第三种是短信轰炸号:专门盯着你的短信验证码接口,用你的短信预算给别人发验证码,账单先烧掉的是你的钱。第四种是探路号:注册进来不发内容,只爬数据、试接口、为后续攻击踩点。认清这四种之后,防刷的目标就清楚了:不是“一个机器人都不许进来”,而是“让批量注册不划算、让单个假号干不了坏事、让真实用户几乎感觉不到”。目标定得太绝对,方案一定会走向全员验证码、全员手机号这种两败俱伤的路。
拿虚构的例子说:阿海做的“海鸥文档”上线第二周,某天凌晨一小时涌入 800 个注册,邮箱全是同一批一次性域名,注册后没有任何文档操作,第二天就开始群发带外链的评论。这就是典型的批量注册号加广告号组合。如果当时只加一道图片验证码,这批号大概率还是能进来——打码平台的人工成本摊到每个号上不到一分钱。真正管用的是组合拳:同一 IP 短时间注册数超限先限流、一次性邮箱域名直接进人工审核队列、新号发外链先受限,这三招一起上,机器人团伙的成本才会被抬到不划算。
摩擦阶梯:从“感觉不到”到“必须动手”,只对可疑者升级
我推荐的摩擦阶梯分四层。第一层是所有人都不感知的:服务端限速、表单提交间隔、同一 IP 和同一设备的注册频率计数。第二层是轻信号:邮箱域名是不是一次性邮箱、密码是不是撞库字典里的常见组合、注册信息是不是复制粘贴式的异常速度。第三层是无感验证:风险分高的会话才触发的无感验证,由服务端校验结果,不给用户出题。第四层才是需要动手的验证:图片或滑块验证、邮箱验证、短信验证,按成本从低到高排列。关键原则是:层层升级,而不是一上来就跳到第四层。一个真实用户在正常网络下注册,应该全程停留在第一层,最多第二层;只有连续触发多条异常信号的会话,才值得你花一次短信成本去验证。
这里要特别提醒:所有判断必须在服务端做。前端隐藏字段、前端限速、前端验证码状态,都只是摆设——机器人根本不走你的前端,直接调接口。正确的做法是:前端只负责收集和展示,限速、评分、放行或拦截的决定全部由服务端下发,接口返回的结果不能被前端绕过。还有一点常被忽略:验证通过的状态要绑定到本次会话和设备,不能“验证一次、终身有效”,否则机器人验证一个号、复用凭证批量注册,你的验证就白做了。
验证方式怎么选:没有完美的,只有代价清单
每种验证方式都是一张代价清单,选之前先算清楚。图片验证码对真人最不友好:视力不好的用户、手机小屏用户、非母语用户都会被卡,而且现代打码服务早就把它打穿了——它现在的主要价值是“抬高一点点批量成本”,而不是“挡住机器人”。无感验证体验最好,但你要接受它对部分网络环境会误判,而且结果不透明,出问题时你很难向用户解释“为什么偏偏是我被拦”。邮箱验证成本最低,适合做“这个邮箱是不是你本人”的确认,但它防不住批量注册:一次性邮箱要多少有多少。短信验证最贵、最容易被薅:短信接口一旦被盯上,一夜之间能烧掉你几个月的预算,所以短信验证必须配额度和限速,绝不能“用户点多少次就发多少次”。
我的建议是按场景配组合,而不是全站统一。普通注册:限速加无感验证就够了。触发异常信号:上邮箱验证加新号受限。涉及钱和邀请奖励的操作:再上短信验证或人工审核。发外链、群发邀请、改关键资料:看账号年龄和行为记录,不看注册时有没有验证过——一个注册时验证过的号,养三天再发广告,照样是广告号。把验证当成“一次性门票”的思路,是注册防刷里最常见的错觉。
新号先受限:比拦截更重要的一招
就算有机器人混进来,也别慌。真正决定损失大小的,是新号进来之后能干什么。给新号设一个“观察期”:注册 24 小时内不能发外链、不能群发邀请、不能批量建项目,超过阈值的操作先进审核队列。这招对真实用户几乎没有影响——刚注册的真人本来也不会一小时发 50 条带链接的评论;对机器人却是致命的,因为它囤号的价值就在于“注册完立刻能用”。观察期的规则要写进产品提示里,不要静默拦截:用户触发限制时,页面要明说“新账号 24 小时后可发外链,如需提前开通请联系客服”,有路可走的限制才不会变成投诉。
同时要准备一条清理链路。被判定为批量假号的账号,先冻结再复核,不要直接删库:误删真实用户的代价,远大于多留一个假号 24 小时的代价。冻结时保留申诉入口,申诉处理要快——一个人做的项目,可以承诺“48 小时内人工复核”,但承诺了就要做到。定期跑清理任务:长期零操作、特征高度一致的账号批量进入复核队列,而不是永远躺在用户表里充数。用户数这个数字,假的比少的更害人,因为它会让你误判留存和转化。
别踩的五个坑
第一,别按国家或地区一刀切封禁。你封掉的可能是一个留学生宿舍的整栋楼,而机器人换个代理 IP 一分钟就绕过去了。第二,别要求所有用户都绑手机号。手机号是最贵的验证,也是隐私最敏感的验证,只用在真正涉及钱和奖励的环节。第三,别把设备指纹无限期存下来。指纹可以用于当次风险判断,但长期留存就是隐私负债,留存期限和用途要写清楚、到期删除。第四,别只在注册处设防。登录、找回密码、换绑邮箱、领奖励,这些接口同样会被刷,限速和异常检测要覆盖全套账号接口。第五,别把拦截结果写得像审判。页面上不要写“系统判定你是机器人”,写“当前操作过于频繁,请稍后再试,或联系客服”——前者会激怒被误伤的真人,后者给双方都留了台阶。
短信接口先上锁,再谈验证流程
短信验证码是最容易被单独盯上的接口,因为它直接连着你的钱。攻击者不需要注册成功,只要反复请求“发送验证码”,就能让你的短信账单失控。所以短信接口的上线顺序应该是:先上锁,再谈流程。锁有四道。第一道是频率锁:同一手机号一分钟内只能发一次,一天最多五次,超了就告诉用户“发送过于频繁,请稍后再试”,不要静默失败——静默失败会让真人反复点、反复等。第二道是同一 IP 和同一设备的发送上限,防止攻击者用一堆手机号轮换轰炸。第三道是验证码有效期和重试次数:验证码 5 分钟有效、最多输错 5 次,过期作废、错满锁定,旧码不能和新码混用。第四道是成本熔断:单日短信支出超过预算阈值,自动降级为邮箱验证并给管理员报警,而不是等月底账单来了才发现。
还有一个细节:验证码短信的文案里,不要写“你的验证码是 123456,泄露给他人将导致损失”这种恐吓式模板,也不要在短信里带任何链接。验证码就是一串数字,附一句“5 分钟内有效,如非本人操作请忽略”就够了。带链接的短信最容易被钓鱼短信模仿,用户分不清哪条是你发的,信任就是这样一点点被消耗掉的。测试短信接口时,别只测“正常流程能不能收到”,要专门测“同一手机号连点十次会怎样”“同一 IP 换十个手机号会怎样”“过期验证码能不能用”这三组攻击用例,任何一组失控,上线后都会变成账单。
被误伤的用户,申诉通道就是第二道防线
再好的风控都会误伤,区别只在于误伤之后用户能不能找回来。申诉通道不是客服邮箱的摆设,它需要三个具体设计。第一,申诉入口要放在拦截页面上,不要让用户自己去帮助中心翻找——被拦住的人本来就在气头上,多一步流失就多一分。第二,申诉表单只问必要信息:被拦的账号、发生时间、大致操作,不要一上来就要求身份证、手机号、工作证明,过度索取只会把真人也吓跑。第三,申诉处理要有时限承诺和状态反馈:提交后立刻给受理编号,48 小时内给结论,结论分“已恢复”“仍需补充信息”“维持限制并说明原因”三种,不要只回“已处理”三个字让用户猜。
申诉数据反过来也是调阈值的最好依据。每周看一次申诉记录:哪条规则触发的申诉最多、哪类网络环境的申诉成功率最高、哪段时间申诉突然暴涨。校园网开学季申诉暴涨,大概率是共享出口 IP 被连坐,这时应该调松 IP 维度的阈值、收紧设备维度的阈值,而不是把规则越收越紧。记住,申诉不是风控失败的证据,它是风控在真实世界里的校准器。一个没有申诉的系统,要么是没人用,要么是误伤的用户已经直接走了——后者更可怕,因为你连自己错在哪都不知道。
上线顺序:一周分三步,不要一天全上
防刷最忌讳的就是一天之内把所有层全打开,然后看着转化率掉下去还不知道是哪一层惹的祸。稳妥的上线顺序是分三步、隔开观察。第一步只上限速和计数:同一 IP、同一设备、同一手机号的频率限制先跑起来,拦截动作先记日志、不真正拦截,跑三天看日志——你会惊讶地发现,正常用户的峰值和机器人的峰值根本不在一个量级,阈值定在哪心里就有数了。第二步再开轻信号和新号受限:一次性邮箱进审核队列、新号 24 小时内不能发外链,这一步对真人几乎无感,却能立刻让批量号的价值打折。第三步才开验证升级:高风险会话触发无感验证,涉及钱的操作触发短信验证。到了第三步,你已经有两步的数据垫底,知道正常流量长什么样,误伤率一上来就能定位到具体是哪条规则。
每一步上线前,先写好回滚开关:某个阈值一旦导致申诉暴涨,能在五分钟内把它调松或关掉,而不是重新部署一次。一个人做的项目尤其需要这个开关,因为你不可能 24 小时盯着后台,半夜出问题时,一个开关比一通部署靠谱得多。回滚不是认输,它是风控的一部分:阈值本来就是试出来的,没有哪套阈值是一次定准、终身有效的。分步上线、留好开关、每周看数,这三件事做到了,防刷就从“一次性的大工程”变成了“可以长期维护的小习惯”,这才是一个人能持续扛得住的节奏。
怎么衡量做得好不好
防刷做完,要看四个数,而不是只看“拦了多少机器人”。先把这四个数的口径写下来,贴在你自己能看到的地方:转化率看注册完成数除以注册开始数,机器人占比看七天零操作且特征一致的账号数除以新增账号数,误伤率看申诉成功数除以申诉总数,验证成本看短信与验证服务月账单除以当月总成本。口径不写下来,三个月后你自己都会忘了当初是怎么算的,数字一变就不知道是业务变了还是口径变了。口径定下来之后,每周同一时间看一次,同一张表上记下阈值改动和数字变化,时间一长,你就能看出哪条规则是真管用、哪条只是在增加误伤。第一是真实注册转化率:上线前后有没有明显下滑,下滑超过 5 个百分点就要回滚一层摩擦。第二是机器人占比:新注册中 7 天内零操作、特征一致的账号比例,有没有降下来。第三是误伤率:申诉量和申诉成功率,申诉成功率长期高于两成,说明你的阈值太紧了。第四是验证成本:短信和验证服务的月账单,占你总成本的比例有没有失控。每周看一次这四个数,调一次阈值——防刷不是上线就完事的工程,它是跟着攻击手法一起进化的对抗。最后记住一句话:好的注册防刷,用户是感觉不到它的存在的;用户一旦感觉到了,多半说明你把它做在了错误的人身上。
评论 (0)
相关文章

合并看起来只是两个号变一个号,实际牵扯订阅、余额、内容、权限、第三方绑定和审计,做错几乎无法反悔。本文讲该不该合、权属核验、冲突矩阵、执行顺序与回滚兜底。

邮箱验证和密码找回是同一扇门的两把锁:一个证明地址归你,一个证明丢了钥匙还能回来。本文讲链接与验证码的取舍、令牌铁律、会话处理、限流、特殊用户与上线前十五个测试场景。

这篇讲“人走之后怎么收尾”:离职清单、交接包、先断外部再收内部的回收顺序、审计复核,以及一人兼多角小团队的简化版。示例产品与人物均为虚构,与 cycle135 的入职指南方向相反、互补不重复。