跳转到内容
Guide

通过 3 项 API 检查阻止注册欺诈,无需验证码

| 7 min read

验证码会损害转化率,而机器人无论如何都会解决它们。 使用 VPN、一次性电子邮件和 IP 阻止列表检查在 120 毫秒内对每个注册进行评分,并且仅挑战前 5%。

Digital security shield representing signup fraud detection and scoring
Photo by Franck on Unsplash

机器人比您的验证码预算便宜。 商业解决农场以大约每千人 1 美元的价格清除 reCAPTCHA v2,因此想要 50,000 个一次性帐户的爬虫在验证码上的花费比在运行脚本的 VPS 上花费的要少。 与此同时,真正的用户会以 3% 到 15% 的速度摆脱谜题。

更好的栅栏就是一个分数。 三个 API 调用可为您提供足够的信号,让 95% 的注册顺利通过,并质疑或阻止剩余的部分。 P99 上的总延迟低于 120 毫秒。

三个信号,三个端点

每个注册都有一个 IP 和一个电子邮件。 这足以提出三个狭隘的问题。

IP 是 VPN、Tor 出口还是数据中心?

真正的消费者注册很少源自 AWS CIDR 块。 Tor 退出节点几乎从不注册 SaaS 的免费试用版。 这 /v1/vpn-detect 端点检查所有三个。

{
  "ip": "34.102.55.10",
  "is_vpn": true,
  "is_tor": false,
  "is_datacenter": true,
  "provider": "Google Cloud",
  "risk_score": 60
}

该电子邮件是否使用一次性域名?

一次性提供商(邮件程序、游击邮件、临时邮件)可在几分钟内轮换收件箱。 如果注册到达一次性域,则用户无意接收后续信息。 /v1/disposable-email/check 标记 700 多个已知提供商以及启发式模式。

{
  "email": "user@mailinator.com",
  "domain": "mailinator.com",
  "is_disposable": true,
  "is_free": false,
  "provider": "Mailinator"
}

该 IP 是否在 bogon 范围内或在信誉列表中?

Bogon IP 永远不应从开放互联网到达您的服务器; 它们指示欺骗标头或损坏的代理。 可疑的反向 DNS(主机名带有“代理”、“tor”、“垃圾邮件”)是另一个廉价的手段。 /v1/ip-blocklist/check 返回风险级别以及每项检查的详细信息。

{
  "ip": "185.220.101.5",
  "is_private": false,
  "is_bogon": false,
  "reverse_dns": "tor-exit-1.example.org",
  "risk_level": "high"
}

权重和分数在一个函数中

并行调用所有三个,添加加权点,限制为 100,然后选择一个判决。 每个产品的阈值都是可调的; 从 20 和 70 开始作为挑战和块削减。

// signup-score.ts
type Verdict = 'allow' | 'challenge' | 'block';

export async function scoreSignup(input: {
  ip: string;
  email: string;
}): Promise<{ score: number; verdict: Verdict; signals: Record<string, unknown> }> {
  const [vpn, email, blocklist] = await Promise.all([
    fetch('https://api.botoi.com/v1/vpn-detect', postJson({ ip: input.ip })).then(r => r.json()),
    fetch('https://api.botoi.com/v1/disposable-email/check', postJson({ email: input.email })).then(r => r.json()),
    fetch('https://api.botoi.com/v1/ip-blocklist/check', postJson({ ip: input.ip })).then(r => r.json()),
  ]);

  let score = 0;
  if (vpn.is_tor) score += 80;
  else if (vpn.is_datacenter) score += 50;
  else if (vpn.is_vpn) score += 35;

  if (email.is_disposable) score += 60;
  else if (email.is_free) score += 10;

  if (blocklist.risk_level === 'high') score += 40;
  else if (blocklist.risk_level === 'medium') score += 20;

  const verdict: Verdict = score >= 70 ? 'block' : score >= 20 ? 'challenge' : 'allow';
  return { score: Math.min(score, 100), verdict, signals: { vpn, email, blocklist } };
}

function postJson(body: unknown): RequestInit {
  return {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: \`Bearer \${process.env.BOTOI_API_KEY}\`,
    },
    body: JSON.stringify(body),
  };
}

关于权重的一些注释。 Tor 信号较强; 仅 80 分就可以将请求纳入封锁范围。 数据中心 IP 捕获大量机器人流量,但也捕获合法的始终在线 VPN 用户,因此 50 分会让他们面临挑战,而不是阻止。 一次性电子邮件得 60 分,因为真正的用户几乎从不选择邮寄者。

将其连接到注册路径中

将分数调用放在用户创建之前。 拒绝阻止带,要求对挑战带进行电子邮件验证,允许其余部分不受影响。

// app/api/signup/route.ts (Next.js)
import { NextResponse } from 'next/server';
import { scoreSignup } from '@/lib/signup-score';

export async function POST(req: Request) {
  const body = await req.json();
  const ip = req.headers.get('x-forwarded-for')?.split(',')[0] ?? '0.0.0.0';

  const result = await scoreSignup({ ip, email: body.email });

  if (result.verdict === 'block') {
    await auditLog({ type: 'signup.blocked', ip, email: body.email, score: result.score });
    return NextResponse.json({ error: 'signup_rejected' }, { status: 403 });
  }

  const user = await createUser({
    email: body.email,
    password: body.password,
    requiresEmailVerification: result.verdict === 'challenge',
    riskScore: result.score,
  });

  return NextResponse.json({ user });
}

审核每一个决定

没有数据就无法调整阈值。 每次注册时保留分数和原始信号。

// Persist the score and signals with the user row for later calibration.
await db.signupAudit.insert({
  userId: user.id,
  ip,
  score: result.score,
  verdict: result.verdict,
  signals: result.signals,
  createdAt: new Date(),
});

每周针对流失和滥用进行校准

每周运行一次报告。 分数越高是否预示着更高的流失率、退款率或滥用报告? 如果得分为 60 的注册用户流失率为 80%,得分为 10 的注册用户流失率为 4%,则您的权重已校准,您可以收紧阻止阈值。 如果梯度平坦,则重新加权。

-- rerun weekly: does the score predict churn and abuse?
SELECT
  FLOOR(score / 10) * 10 AS score_bucket,
  COUNT(*) AS signups,
  ROUND(100.0 * SUM(CASE WHEN churned THEN 1 ELSE 0 END) / COUNT(*), 1) AS churn_pct,
  ROUND(100.0 * SUM(CASE WHEN abuse_reported THEN 1 ELSE 0 END) / COUNT(*), 1) AS abuse_pct
FROM signup_audit
WHERE created_at > NOW() - INTERVAL '90 days'
GROUP BY 1
ORDER BY 1;

目标是单调曲线。 每个分数桶的结果应该比它下面的分数桶的结果更差。 如果没有,请添加一个信号(设备指纹、来自同一 /24 的注册速度)或删除一个不会拉动自身重量的权重。

这与验证码比较适合的地方

方法 真实用户的摩擦力 攻击者的成本 P99 延迟
验证码 v2 下降 3-15% 每解决 1,000 个问题 1 美元 300-800毫秒
hCaptcha 企业版 下降 2-8% 每 1,000 人 1-2 美元 250-600毫秒
3 信号评分 95% 的用户为 0% 必须获得干净的IP+真实的邮箱 80-120毫秒

当您需要美国银行的防机器人登录流程时,分数不能取代验证码。 这是 SaaS 注册、新闻通讯和试用通道的正确默认值。

这不包括什么

  • 登录时填充凭据:按帐户使用密钥或速率限制。
  • 协调住宅代理的注册激增:添加每 /24 和每电子邮件域加注册分钟的速度限制。
  • 使用一次性地址完成电子邮件验证的用户:为挑战组设置 24 小时冻结功能访问。

获取 API 密钥并将其放入

获取免费钥匙 botoi.com/api/signup。 免费套餐每天涵盖 1,000 个分数,足以对最近一周的注册进行校准。 付费计划起价为每月 9 美元,每天可处理 10,000 个请求。

每个端点的完整参考: VPN 检测 API, 一次性电子邮件检查 API, 和 IP 阻止列表检查 API

FAQ

为什么不使用验证码呢?
验证码成本转换(典型下降:真实用户的 3% 到 15%)和商业验证码农场以每千人不到 1 美元的价格解决 reCAPTCHA v2。 使用信号进行评分可以避免 95% 的注册者遇到的麻烦,并且只挑战可疑的部分。
乐谱中包含哪些信号?
三:VPN/Tor/数据中心 IP 标志、一次性或一次性电子邮件域以及 IP 阻止列表命中(bogons、可疑主机名)。 每个返回时间都在 50 毫秒以内。 对它们进行加权以获得 0-100 的风险评分,然后根据阈值进行决定。
阻止数据中心 IP 是否会伤害真实用户?
企业和消费者 IP 与数据中心 CIDR 块不匹配。 唯一受影响的真正用户是使用始终在线 VPN 的用户,这通常是少数,您可以将其路由到辅助验证路径,而不是直接阻止。
如何处理中间的低信号?
分数高于70:阻止。 分数低于20:允许。 20 到 70 之间:需要电子邮件验证或升级(短信代码、密钥)。 您将摩擦力转移到风险带上,而不是整个漏斗上。
我可以根据历史注册测试得分吗?
是的。 通过三个端点重播过去 90 天的注册情况,将分数与流失、退款和滥用报告列结合起来,并在执行任何操作之前校准阈值。 每个端点在使用相同输入的重复调用中保持稳定。

开始使用 botoi 构建

150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。