别等被薅秃才想起风控:vibe 项目的业务反作弊实战
验证码拦不住业务作弊。这篇实战指南给出四层防御体系(注册→设备→行为→业务)、可直接抄的风险评分加权打分表、三档处置灰度策略,以及每周 15 分钟的风控巡检清单——让作弊无利可图,同时不误伤好人。

先讲三个真实噩梦:你可能正在裸奔而不自知
噩梦一:你给新用户发了 50 元无门槛券做拉新,凌晨三点被脚本扫到,早上醒来后台多了 2000 个"新用户",券池见底,真用户进来发现券没了,你的获客预算变成了黑产的进货款。
噩梦二:你给每个账号每月 100 次免费 AI 调用额度,想靠免费层转化付费。某天账单异常,查日志发现 300 个账号共享同一套请求指纹,24 小时打满额度——你的模型账单在替别人跑业务。
噩梦三:你做了个知识付费社区,有人用脚本批量注册小号给自己点赞、刷评论区热榜,真用户看到的全是水军内容,第三天就流失了。
这三个噩梦有一个共同点:登录接口的防刷一个都没拦住。验证码、短信限流、IP 封禁——这些都在"入口"这一层,而作弊发生在"业务"这一层。黑产早就过了跟你拼验证码的阶段,他们拼的是业务规则的理解:你的券什么时候发、额度怎么算、排行榜怎么排,他们比你的产品经理研究得还透。
所以这篇指南只谈一件事:业务层反作弊。不是 Web 安全(那是防 SQL 注入、XSS 的事),不是登录防刷(短信 OTP 限流那套),更不是供应链安全(依赖包投毒的防御)。这几块站内已经有专门指南讲过,本文最后会给出互链边界,不重复造轮子。
作弊画像:先认识你的敌人
动手之前先把敌人分类。vibe 项目最常遇到的作弊就四类,每一类的作案动机和手法都不同,防御手段也完全不同。混为一谈是很多独立开发者踩的第一个坑。
第一类:批量注册 / 薅羊毛
目标是你的"新用户福利":优惠券、免费额度、邀请奖励、试用会员。手法是脚本化注册,配合接码平台收短信、代理 IP 池换出口。特征很明显——注册时间高度集中、行为序列几乎一模一样(注册→领券→下单→提现,一气呵成)、设备指纹高度相似。
这一类的残酷之处在于:它是被你的增长策略养大的。券越实在、门槛越低,黑产来得越快。很多 vibe 项目死在"增长黑客"那一页 PPT 上——拉新数据漂亮了三个月,第四个月发现全是羊毛党。
第二类:虚假交易 / 刷单
目标是你的"信任体系":销量、评分、排行榜、推荐权重。手法是自买自卖、互刷、买评价。电商、内容平台、freelance 市场是重灾区。特征是交易双方高度关联(同一设备、同一 IP 段、资金闭环)、评价文本模板化、交易时间分布异常(凌晨三点集中下单)。
第三类:内容作弊 / 刷榜
目标是"曝光位":热榜、推荐流、搜索排名。手法是刷播放、刷点赞、刷评论、关键词堆砌。和第二类的区别在于它不直接产生交易,而是污染你的内容生态。最要命的是劣币驱逐良币:真创作者发现认真做内容不如刷,平台就完了。
第四类:额度盗刷
vibe 时代的新物种。你的产品如果封装了大模型 API、短信网关、云存储这些按量计费的资源,攻击者就会想办法把你的 key 或额度偷出来转卖。手法包括:爬你的前端找硬编码 key、注册小号薅免费额度再转售、利用你的"免费试用"接口做代理中转。特征是调用模式非人类(稳定的高频、无昼夜节律)、token 消耗结构异常(超长输入、批量任务)。
四类画像画完,防御思路就清晰了:没有银弹,只有纵深。指望一层拦截解决所有问题,等于指望一道门防住所有贼。
四层防御体系:从注册到业务的纵深拦截
核心架构就一张图,建议打印出来贴在显示器旁边:
图 1:四层防御体系。每一层只做一件事:尽早拦截、尽早分流,不要把所有风控押宝在单层。
这套体系的设计哲学是成本递增、精度递增:越靠前的层成本越低(一次校验几毫秒),误伤代价也越低;越靠后的层越贵(人工审核),但判断越准。请求像水流一样从左往右走,能在前层拦住的,绝不送到后层烧钱。
第一层:注册层——把门槛设在"薅羊毛不划算"的位置
注册层的目标不是"零作弊",而是提高作弊成本。黑产是做生意的:当单个账号的获取成本超过羊毛收益,他们自然去薅下一家。
- 邮箱验证 + 域名黑名单:一次性邮箱域名(几千个,网上有公开列表)直接拦截。这是最便宜的一刀,能砍掉三成以上的脚本注册。
- 手机验证:接码平台让短信验证不再是铜墙铁壁,但它依然是成本杠杆——每个号几毛钱,乘以一万个号就是真金白银。配合"同一号码 24 小时内最多验证 N 个账号",效果翻倍。
- 邀请码门槛:内测期最有效的手段。邀请码把"无差别攻击"变成了"定点突破",攻击面小两个数量级。等你有了一定的用户基数和风控数据,再逐步放开。
- 注册节奏限流:同一 IP / 设备 1 小时内注册超过阈值,直接进人工审核。注意这里限的是"节奏"不是"总量"——正常用户不会 1 分钟注册 5 个账号。
一个判断标准:如果你的注册流程 30 秒能走完,脚本 3 秒也能走完,你的门槛就是纸糊的。vibe coder 特别容易在这里偷懒——"先跑起来再说",结果跑起来的是黑产的脚本。
第二层:设备层——认设备不认人
账号可以无限注册,设备和 IP 却是稀缺资源。设备层的核心是把"账号"聚类成"团伙"。
- 设备指纹:采集 Canvas、WebGL、字体列表、屏幕分辨率、时区等几十个维度,生成稳定 ID。注意合规边界:只做风控用途、不要跨站追踪,隐私政策里写清楚。开源方案(如 FingerprintJS 开源版)对独立项目够用了,别一上来就买商业服务。
- IP 信誉:机房 IP、代理 IP、Tor 出口节点的名单是公开可查的。同一个 IP 段短时间内出现几十个"新用户",直接标记。云厂商的 IP 段列表定期更新,这个检查写成定时任务就行。
- 关联图谱(轻量版):不需要上图数据库,一张关系表就够:记录"账号-设备- IP -支付方式"的关联。当 50 个账号共享 3 台设备,团伙现形。vibe 项目用 Postgres 的一张关联表 + 定时 SQL 就能跑起来。
-- 轻量团伙发现:找出共享设备的账号簇
SELECT device_fingerprint, COUNT(DISTINCT user_id) AS account_cnt,
COUNT(*) AS event_cnt
FROM risk_events
WHERE created_at > NOW() - INTERVAL '24 hours'
GROUP BY device_fingerprint
HAVING COUNT(DISTINCT user_id) >= 5
ORDER BY account_cnt DESC;
这条 SQL 每天跑一次,能发现八成的批量注册团伙。别小看这种"土办法"——风控的第一性原理是数据,不是模型。先有数据闭环,再谈机器学习。
第三层:行为层——看"怎么做",不只看"是谁"
设备层解决"团伙是谁",行为层解决"他在干什么"。同一个正常用户,行为序列是有"人味"的:浏览、犹豫、比价、下单,时间间隔符合人类节奏。脚本的行为序列是"机器味"的:注册→领券→下单→提现,四步 40 秒,间隔方差接近零。
- 按业务动作的进阶限流:注意"进阶"两个字。登录接口限流是按 IP 按分钟;业务限流要按"业务动作 × 账号 × 时间窗口":比如"同一账号 1 小时内领券不超过 2 张""同一设备 24 小时内下单不超过 5 笔"。阈值从你的正常用户 P99 分位数里取,别拍脑袋。
- 行为序列异常:把关键路径(注册→实名→领券→下单→支付)记成事件流,算两个指标:路径完成速度、步骤间隔方差。脚本的特征是"太快、太齐"——人类用户从注册到下单的中位数可能是 2 小时,脚本是 47 秒。
- 人机验证升级:行为可疑但证据不足时,别直接封禁,弹人机验证(Turnstile / reCAPTCHA)。这是"限流档"的核心动作:让真人多点一下,让脚本直接卡死。
第四层:业务层——规则引擎守住钱袋子
前三层都是"通用"的,这一层是"你的业务专属"的,也是 ROI 最高的一层。因为只有你知道自己的钱是怎么被薅的。
- 新用户大额券熔断:规则示例——"注册 24 小时内的账号使用面额 ≥50 元的券,订单自动进人工审核队列"。熔断的精髓是"先拦后审":钱没出去之前,一切都来得及。
- 可疑订单人工审核队列:触发条件包括:首单即大额、收货地址频繁变更、支付方式与注册信息国别不一致。审核队列要有 SLA(比如 4 小时内处理),否则正常用户的体验会被拖死。
- 规则引擎:规则写成配置而不是硬编码。vibe 项目推荐最简单的实现:数据库里一张规则表(条件表达式 + 动作 + 优先级),管理后台可开关。别一上来就引入 Drools 这种重型引擎——你的规则数量在超过 50 条之前,不配用规则引擎框架。
四层走完,记住一句话:风控的目标函数不是"抓住所有坏人",而是"让作弊无利可图,同时不误伤好人"。任何把正常用户挡在门外的风控,都是失败的风控。
落地实战:风险评分、灰度处置与申诉通道
四层体系是骨架,真正让它转起来的是风险评分 + 三档处置。流程如下图:
图 2:风险评分处置流。打分 → 三档处置 → 申诉回路。阈值先灰度验证,再全量。
风险评分加权打分表(可直接抄)
别被"机器学习"吓住。vibe 项目的风控 90% 的场景用加权打分表就够了——每个风险信号一个权重,加总得到 0-100 分。权重初始值拍脑袋定,跑两周数据后再调。这张表示例:
// 伪代码:风险评分 = 各信号权重之和,上限 100
score = 0
score += 25 if email_domain in DISPOSABLE_DOMAINS // 一次性邮箱
score += 20 if ip_reputation in (DATACENTER, PROXY) // 机房/代理 IP
score += 15 if device_accounts_24h >= 5 // 同设备多账号
score += 15 if reg_to_order_minutes < 10 // 注册到下单过快
score += 10 if coupon_value >= 50 and account_age_h < 24 // 新号大额券
score += 10 if behavior_variance < 0.1 // 行为间隔异常整齐
score += 5 if order_time in (0, 5) // 凌晨下单(弱信号)
score = min(score, 100)
三个设计要点:第一,弱信号单独都不致命,组合起来才致命——凌晨下单的正常用户多了去了,但"凌晨 + 新号 + 大额券 + 机房 IP"四连,基本就是黑产。第二,权重调整要有变更记录,谁改的、为什么改,方便复盘。第三,打分逻辑与处置逻辑解耦:打分只输出分数,处置只看分数区间,这样调阈值不用改代码。
三档处置:观察 / 限流 / 封禁
- 观察档(0-30 分):正常放行,但打标。标的意义在于事后复盘——如果某批账号事后被证实是黑产,回头看它们的分数分布,就知道阈值该往哪调。
- 限流档(30-70 分):核心动作降级 + 人机验证。比如领券要过验证、提现延迟 24 小时到账。这一档的哲学是"让可疑用户觉得麻烦,而不是觉得被针对"——真人多点一下就过去了,脚本直接卡死。
- 封禁档(70-100 分):拦截或封禁,涉钱动作进人工审核队列。注意:封禁永远是"账号 + 设备 + IP"的组合拳,只封账号等于没封——黑产注册新号的成本是 3 秒。
阈值上线的铁律:先灰度,再全量。新阈值先对 5% 流量生效,跑 48 小时,看两个指标:拦截量(有没有抓到真坏人)、申诉量(有没有误伤好人)。申诉量一抬头,立刻回滚阈值。见过太多团队把阈值一拍脑袋全量上线,第二天客服被正常用户冲了。
误伤申诉通道:风控的"安全气囊"
再好的风控都会误伤。没有申诉通道的风控系统是不完整的——误伤的用户没有地方说理,流失了你还不知道为什么。
- 被拦截/限流的页面必须给明确的申诉入口,而不是一句"系统繁忙"。写清楚:为什么被拦(模糊描述即可,如"检测到异常操作")、多久能解封、去哪里申诉。
- 申诉走人工审核,SLA 24 小时内。审核结论要回流到打分系统:确认误伤的样本,用来降低对应信号的权重——每一次误伤都是调优的数据。
- 和人工审批流打通:如果你的项目已经有人审审批工作流(比如订单审核、内容审核),申诉队列直接复用同一套,别另起炉灶。
数据闭环:让风控越用越聪明
风控系统上线那天不是终点,是起点。黑产会进化,你的规则必须跟着进化。进化的燃料是数据。
作弊事件埋点:先有数据,再谈智能
四个必埋的事件:risk.scored(每次打分:分数、各信号明细)、risk.action(每次处置:档位、动作)、risk.appeal(每次申诉:原因、结论)、risk.confirmed_fraud(事后确认的作弊:来源是人工审核还是用户举报)。埋点时把当时的特征快照一起存下来——事后复盘时,"当时为什么只打了 40 分"这个问题,没有快照是回答不了的。
每周 15 分钟风控巡检清单
独立开发者没时间天天盯风控,那就每周固定 15 分钟,看这五个数:
- 三档处置量的周环比:限流档突然翻倍?可能是阈值漂移,也可能是新一波攻击。
- 申诉率 = 申诉量 / 处置量:超过 5% 说明误伤偏高,优先调阈值而不是加规则。
- 确认作弊的漏网率:事后确认的作弊账号里,有多少当时只打了"观察档"?这是调权重的直接输入。
- Top 3 风险信号的命中分布:某个信号突然失效(命中归零),可能是黑产换了手法。
- 新注册用户的 7 日留存对比:被处置过的账号 vs 未被处置的——如果前者留存反而更高,说明你的风控在赶走好人。
攻防复盘模板
每次大的作弊事件(损失超过你一周收入,或波及超过 100 个账号),做一次 30 分钟复盘,只回答四个问题:攻击者用了什么手法(精确到步骤)?我们的哪一层本该拦住但没拦住?加一条什么规则/调哪个权重能拦住?这条规则的误伤面有多大?复盘文档沉淀下来,就是你的"黑产手法知识库"——vibe 项目最大的风控资产不是代码,是这份知识库。
边界声明:这篇指南不管什么
最后划清边界,避免你找错药方:登录接口防刷(短信验证码限流、爆破防护)请看短信 OTP 登录指南;Web 攻击防护(SQL 注入、XSS、CSRF)请看 Web 安全基线指南;供应链安全(依赖包投毒、lockfile 校验)请看依赖供应链安全指南。本文只解决业务层作弊——四篇互链,各管一摊。
一句话总结:风控不是上线前的一次性工程,而是上线后的持续运营。四层体系给你骨架,加权打分给你大脑,数据闭环给你进化能力。别等被薅秃了才想起风控——那时候交的学费,是现在的十倍。
评论 (0)
相关文章

用户的 credits 不是一个余额字段,而是一本账。这篇指南为 AI SaaS 打造复式记账式积分账本:可直接抄的不可变流水表结构、幂等键 + 行锁的并发扣减、应对 token 用量不可预测的预授权/结算两阶段、退款与过期的回写规则、三方每日对账、负余额熔断,以及防薅清单。

企业客户安全问卷 5 必答项拆解:OIDC/SAML 决策表与 SAML 启动阈值公式;org→team→member 三级数据模型与可直接抄的 Prisma schema;SP 发起的登录流程、JIT 自动建账号、域名认领、成员移除即时失效;SCIM 取舍、12 项转正验收清单与问卷应答模板;SSO 定价策略。

AI 写代码快,但默认不写安全代码:本地跑通不等于线上安全。这篇实战指南带你补上 vibe 项目的 Web 安全基线——CSP 安全头、CSRF Token、XSS 防护、SQL 参数化、Cookie 三件套、依赖供应链门禁,外加一份可直接复制的上线前 10 项验收清单。