|

Aimee

Write the Code. Change the World.

分享裂变背后:为什么光验证手机号根本拦不住羊毛党

· 分享镜

分享裂变背后:为什么光验证手机号根本拦不住羊毛党

一个账号领了 37 份礼包

活动第三天,一个账号领了37份新人礼包。翻日志发现:这个用户注册了37个账号,每个都用真实手机号+验证码注册,每个账号都领了奖励。

开发说:我们有手机号验证码,怎么可能批量注册?

因为有接码平台——花几十块钱,能租到几百个真实手机号,每个号接一条验证码短信用完即弃。


接码平台是什么

市面上有专门做"空号接码"的平台,你充值10块钱,能租几十个真实手机号,这些号只用来接一条验证码短信,验证通过之后就废弃。

所以光靠"一个手机号只能注册一次"根本防不住。羊毛党的成本极低,50块钱可以注册几百个账号。


正常用户 vs 羊毛机器人的行为差异

这才是防薅毛的核心出发点:行为特征不一样

正常用户羊毛机器人
注册路径看到推广 → 下载 → 注册接码注册,直奔领奖页
领奖后行为继续浏览、下单、使用 App领完立刻不活跃
设备/IP独立设备,真实网络同一设备注册多账号,机房/代理 IP

羊毛机器人的特征很明显:

  • 注册完立刻领奖,中间没有任何浏览行为
  • 同一设备注册多个账号(换手机号,但设备没换)
  • 同一 IP 段大量注册,尤其是机房 IP 或代理 IP
  • 账号没有真实使用行为,领完奖励基本消失

多维度联合判断

只用一个维度很容易被绕过,需要联合打分。

def risk_score(user_event):
    score = 0

    # 设备指纹检查:同一设备注册过几个账号
    device_accounts = get_accounts_by_device(user_event.device_id)
    if len(device_accounts) > 2:
        score += 40  # 高权重

    # IP 聚集:同一 /24 网段注册量
    ip_count = get_ip_subnet_count(user_event.ip)
    if ip_count > 10:
        score += 30

    # 行为特征:注册到领奖的时间间隔
    if user_event.register_to_reward_seconds < 60:
        score += 20

    # 机房 IP 或已知代理 IP
    if is_datacenter_ip(user_event.ip):
        score += 30

    return score  # >= 60 触发拦截

设备指纹是最重要的维度。App 端可以采集设备型号 + 系统信息 + 硬件特征生成指纹,H5 端用 Canvas 指纹 + 浏览器特征。同一设备指纹注册两个以上账号,基本就可以判定异常。


奖励冻结期:给风控留时间

发现问题再撤回奖励,比直接不发要麻烦得多。更好的做法是奖励不立刻到账

设置 7 天冻结期,冻结期内:

  • 风控系统持续分析账号行为
  • 如果账号被标记为异常,冻结中的奖励直接作废
  • 正常用户 7 天后自动到账,体验几乎无影响
奖励状态:PENDING → (7天后)→ SETTLED(正常)
                   → (风控标记)→ CANCELLED(作废)

人工审核兜底

风控打分再准也有误判。当单设备或单 IP 触发量超过阈值,进人工审核队列,而不是直接拒绝。

阈值参考:

  • 同一设备指纹注册 > 3 个账号 → 人工复核
  • 同一 /24 IP 段注册 > 20 个账号 → 触发人工
  • 风控打分 60-80 分之间 → 人工,> 80 分 → 自动拒绝

人工审核效率比想象中高,一个运营一天能审几百条,抓住头部批量薅毛的,影响基本能控制住。


说到底:手机号只验证了"有没有一个号",设备指纹才能验证"是不是同一个人"——防薅毛要联合打,奖励冻结期给自己留后手。

评论0

登录后参与评论。

还没有评论,来抢沙发吧。

回到顶部