Перейти к содержимому
Guide

Остановите мошенничество при регистрации с помощью трех проверок API без необходимости ввода кода

| 7 min read

Капчи вредят конверсии, и боты все равно их решают. Оцените каждую регистрацию с помощью VPN, одноразовой электронной почты и проверки черного списка IP-адресов менее чем за 120 мс и бросьте вызов только верхним 5%.

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

Боты дешевле вашего бюджета на капчу. Коммерческая ферма очистки очищает reCAPTCHA v2 по цене около 1 доллара за тысячу, поэтому парсер, которому нужно 50 000 одноразовых учетных записей, тратит меньше на капчи, чем на VPS для запуска скрипта. Между тем, ваши реальные пользователи решают задачу с отрывом от 3 до 15%.

Лучший забор – это балл. Три вызова API дадут вам достаточный сигнал, чтобы пропустить 95% регистраций без проблем и проблем или заблокировать оставшуюся часть. Общая задержка менее 120 мс на P99.

Три сигнала, три конечных точки

У каждой регистрации есть 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
}

Использует ли электронная почта одноразовый домен?

Одноразовые провайдеры (mailinator, guerillamail, tempmail) меняют входящие почтовые ящики за считанные минуты. Если регистрация попадает в одноразовый домен, пользователь не намерен получать последующие действия. /v1/disposable-email/check отмечает более 700 известных поставщиков, а также эвристические шаблоны.

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

Находится ли IP-адрес в Богонском диапазоне или в списке репутации?

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 баллов, потому что реальные пользователи почти никогда не выбирают mailinator.

Подключите его к маршруту регистрации

Поместите вызов оценки непосредственно перед созданием пользователя. Отклонить блокировку, потребовать подтверждение электронной почты в группе вызова, оставить все остальное нетронутым.

// 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 доллар за 1000 решений 300-800 мс
hCaptcha Enterprise падение на 2-8% $1-2 за 1000 250-600 мс
3-сигнальная оценка 0% для 95% пользователей Необходимо получить чистый IP + реальный почтовый ящик. 80-120 мс

Оценка не заменяет проверку, если вам нужны защищенные от ботов потоки входа в банк США. Это правильный вариант по умолчанию для подписки SaaS, информационного бюллетеня и пробных версий.

Что это не распространяется

  • Ввод учетных данных при входе в систему: используйте пароль или ограничение скорости для учетной записи.
  • Скоординированные пакеты регистрации с резидентных прокси: добавьте ограничения скорости за 24 часа и за минуту электронной почты плюс регистрация.
  • Пользователи, выполняющие проверку электронной почты с использованием одноразового адреса: установите 24-часовую блокировку доступа к функциям для группы испытаний.

Получите ключ API и вставьте его

Получите бесплатный ключ по адресу botoi.com/api/signup. Уровень бесплатного пользования охватывает 1000 оценок в день, чего достаточно для проведения калибровки по количеству регистраций за последнюю неделю. Платные планы начинаются с 9 долларов США в месяц за 10 000 запросов в день.

Полная ссылка для каждой конечной точки: API обнаружения VPN, Одноразовый API проверки электронной почты, и API проверки черного списка IP-адресов.

FAQ

Почему бы вместо этого не использовать капчу?
Стоимость конвертации капчи (типичное снижение: от 3 до 15% реальных пользователей) и коммерческие фермы CAPTCHA решают reCAPTCHA v2 менее чем за 1 доллар за тысячу. Оценка с помощью сигналов позволяет избежать проблем для 95% регистраций и проверяет только подозрительную часть.
Какие сигналы учитываются в счете?
Третье: IP-флаги VPN/Tor/центра обработки данных, одноразовый или одноразовый домен электронной почты и попадания в черный список IP-адресов (богоны, подозрительные имена хостов). Каждый возвращается менее чем за 50 мс. Взвесьте их, чтобы получить оценку риска от 0 до 100, а затем примите решение по пороговому значению.
Вредит ли блокировка IP-адресов центров обработки данных реальным пользователям?
Корпоративные и потребительские IP-адреса не соответствуют блокам CIDR центра обработки данных. Единственные реальные пользователи, которых это касается, — это люди, пользующиеся постоянно включенными VPN, а это обычно меньшинство, которого можно направить на дополнительный путь проверки, а не заблокировать полностью.
Как мне справиться со слабым сигналом середины?
Оценка выше 70: блок. Оценка ниже 20: разрешено. От 20 до 70: требуется подтверждение электронной почты или повышение уровня (код SMS, ключ доступа). Вы переносите трение на полосу риска, а не на всю воронку.
Могу ли я проверить подсчет очков на основе исторических регистраций?
Да. Воспроизведите последние 90 дней регистрации через три конечных точки, объедините результаты с помощью столбцов оттоков, возвратов и отчетов о злоупотреблениях, а также откалибруйте свои пороговые значения, прежде чем применять какие-либо меры. Каждая конечная точка остается стабильной при повторных вызовах с одним и тем же входом.

Начните разработку с botoi

150+ API-эндпоинтов для поиска, обработки текста, генерации изображений и утилит для разработчиков. Бесплатный тариф, без банковской карты.