تخطي إلى المحتوى
Guide

أوقف الاحتيال في عملية التسجيل من خلال 3 عمليات فحص لواجهة برمجة التطبيقات (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 دولار لكل ألف، لذلك ينفق الكاشط الذي يريد 50000 حساب سريع على رموز التحقق أقل من إنفاقه على 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، وtemmail) بتدوير صناديق البريد الوارد في دقائق. إذا وصل الاشتراك إلى مجال يمكن التخلص منه، فلن يكون لدى المستخدم أي نية لتلقي المتابعة. /v1/disposable-email/check أعلام أكثر من 700 من مقدمي الخدمات المعروفين بالإضافة إلى الأنماط الإرشادية.

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

هل عنوان IP موجود في نطاق bogon أم في قائمة السمعة؟

يجب ألا تصل عناوين IP الخاصة بـ Bogon أبدًا إلى الخادم الخاص بك من الإنترنت المفتوح؛ تشير إلى رأس مخادع أو وكيل معطل. يعد DNS العكسي المشبوه (أسماء المضيفين التي تحتوي على "proxy" و"tor" و"spam") وسيلة أخرى رخيصة الثمن. /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),
  };
}

بعض الملاحظات على الأوزان. تور إشارة قوية. 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 2-8% انخفاض 1-2 دولار لكل 1000 250-600 مللي ثانية
3- درجة الإشارة 0% لـ 95% من المستخدمين يجب الحصول على IP نظيف + صندوق بريد حقيقي 80-120 مللي ثانية

لا تحل النتيجة محل اختبار CAPTCHA عندما تحتاج إلى تدفقات تسجيل دخول مقاومة للروبوتات لبنك أمريكي. إنه الإعداد الافتراضي الصحيح لتسجيل SaaS والنشرة الإخبارية والبوابات التجريبية.

ما لا يغطيه هذا

  • حشو بيانات الاعتماد عند تسجيل الدخول: استخدم مفتاح مرور أو حدًا للسعر حسب الحساب.
  • دفعات تسجيل منسقة من الوكلاء السكنيين: أضف حدود السرعة لكل /24 ولكل دقيقة من مجال البريد الإلكتروني بالإضافة إلى الاشتراك.
  • المستخدمون الذين يكملون التحقق من البريد الإلكتروني باستخدام عنوان بعيد: قم بتعيين تجميد لمدة 24 ساعة للوصول إلى الميزات لنطاق التحدي.

احصل على مفتاح API وقم بإفلاته

احصل على مفتاح مجاني في botoi.com/api/signup. تغطي الطبقة المجانية 1000 نتيجة يوميًا، وهو ما يكفي لتشغيل المعايرة مقابل الأسبوع الأخير من الاشتراكات. تبدأ الخطط المدفوعة بسعر 9 دولارات شهريًا لـ 10000 طلب يوميًا.

مرجع كامل لكل نقطة نهاية: VPN كشف API, واجهة برمجة تطبيقات فحص البريد الإلكتروني التي يمكن التخلص منها، و IP Blocklist Check API.

FAQ

لماذا لا تستخدم كلمة التحقق بدلا من ذلك؟
تحويل تكلفة Captcha (الانخفاض النموذجي: من 3 إلى 15% من المستخدمين الحقيقيين) وتقوم مزارع CAPTCHA التجارية بحل reCAPTCHA v2 بأقل من دولار واحد لكل ألف. يؤدي التسجيل باستخدام الإشارات إلى تجاوز الاحتكاك بنسبة 95% من الاشتراكات ولا يتحدى إلا الشريحة المشبوهة.
ما هي الإشارات التي تدخل في النتيجة؟
ثلاثة: إشارات IP لـ VPN/Tor/datacenter، ومجال البريد الإلكتروني الذي يمكن التخلص منه أو التخلص منه، وقائمة حظر IP (الرموز، وأسماء المضيفين المشبوهة). يعود كل منها في أقل من 50 مللي ثانية. قم بوزنها للحصول على درجة المخاطرة من 0 إلى 100، ثم حدد كل عتبة.
هل يؤدي حظر عناوين IP لمراكز البيانات إلى الإضرار بالمستخدمين الحقيقيين؟
لا تتطابق عناوين IP الخاصة بالشركات والمستهلكين مع كتل CIDR لمراكز البيانات. المستخدمون الحقيقيون الوحيدون المتأثرون هم الأشخاص المتصلون بشبكات VPN التي تعمل دائمًا، وهم عادةً أقلية يمكنك توجيهها إلى مسار تحقق ثانوي بدلاً من حظرها تمامًا.
كيف أتعامل مع منتصف الإشارة المنخفضة؟
النتيجة فوق 70: كتلة. النتيجة تحت 20: السماح. بين 20 و70: يتطلب التحقق من البريد الإلكتروني أو خطوة المتابعة (رمز الرسائل القصيرة، مفتاح المرور). يمكنك تحويل الاحتكاك إلى النطاق الخطير بدلاً من مسار التحويل بأكمله.
هل يمكنني اختبار النتيجة مقابل الاشتراكات التاريخية؟
نعم. قم بإعادة عرض آخر 90 يومًا من الاشتراكات من خلال نقاط النهاية الثلاث، وضم النتيجة باستخدام أعمدة الإبلاغ عن الإيقاف والاسترداد وتقارير إساءة الاستخدام، وقم بمعايرة الحدود الخاصة بك قبل فرض أي شيء. تظل كل نقطة نهاية مستقرة عند المكالمات المتكررة بنفس الإدخال.

ابدأ البناء مع botoi

أكثر من 150 نقطة نهاية API للبحث ومعالجة النصوص وتوليد الصور وأدوات المطورين. باقة مجانية، بدون بطاقة ائتمان.