التوثيق / أدلة حالات الاستخدام
الوقاية من احتيال الرسائل النصية
امنع الأرقام الوهمية والأرقام ذات التعرفة المرتفعة من استنزاف ميزانية الرسائل ورموز OTP.
المشكلة#
يدفع ما يُعرف بـ SMS pumping تطبيقك إلى إرسال رموز التحقق إلى أرقام يتحكم بها المهاجم، غالبًا في وجهات غالية، وتدفع أنت ثمن كل رسالة. كما تتجاوز الأرقام الوهمية والمؤقتة حدود التسجيل المعتمدة على الجوال.
الإشارات التي تُدمج#
- تقييم الجوال:
isValidوcarrierوdisposableوblacklisted. - سمعة IP لمصدر الطلب: الروبوتات وشبكات الاستضافة مصادر شائعة.
- معلومات الدولة إذا أردت فرض قائمة بدول الوجهة.
- القوائم السوداء لأرقام الجوال وعناوين IP التي أساءت إليك سابقًا.
خطوات التكامل#
- قبل إرسال OTP وحّد صيغة الرقم واستدعِ تقييم الجوال مع
countryCodeمتى عرفته. - ارفض الأرقام غير الصالحة أو المؤقتة أو المدرجة في قائمة سوداء.
- افحص IP صاحب الطلب. يجب أن تتلقى الروبوتات ومصادر Tor اختبار CAPTCHA أو تُرفض.
- طبّق حدودك الخاصة لكل جوال ولكل IP ولكل دولة وجهة في الساعة.
- أرسل الرسالة فقط عند اجتياز كل الفحوص، وأضف أرقام الإساءة المؤكدة إلى قائمة سوداء للجوال.
<?php
function canSendOtp(string $phone, string $country, string $ip): bool {
$headers = 'Authorization: Bearer ' . getenv('GURDX_KEY');
$get = fn ($path, $q) => json_decode(file_get_contents(
'https://gurdx.cretip.com/api/' . $path . '?' . http_build_query($q), false,
stream_context_create(['http' => ['header' => $headers, 'timeout' => 4]])
), true);
$p = $get('scoring/phone', ['phone' => $phone, 'countryCode' => $country, 'userID' => $phone]);
if (($p['status'] ?? '') !== 'success') return false; // fail closed
if (! $p['data']['isValid'] || ($p['data']['disposable'] ?? false) || $p['data']['blacklisted']) {
return false;
}
$i = $get('lookup/ip/threats', ['ip' => $ip]);
return ! ($i['data']['threats']['isBot'] ?? false) && ! ($i['data']['threats']['isTor'] ?? false);
}
قرارات مقترحة#
| النتيجة | الإجراء |
|---|---|
| رقم جوال صالح وIP نظيف | إرسال |
| رقم صالح لكن IP استضافة أو بروكسي | إضافة CAPTCHA قبل الإرسال |
| رقم غير صالح أو مؤقت أو مدرج في قائمة سوداء | لا تُرسل |
| طلبات كثيرة لبادئة واحدة في وقت قصير | إيقاف هذه الوجهة مؤقتًا وإرسال تنبيه |
الإغلاق الآمن عند خطأ الـ API يحمي ميزانيتك، لكن إعادة محاولة قصيرة أو الرجوع إلى CAPTCHA يُبقي المستخدمين الحقيقيين يتقدمون.
Note: صلاحية الرقم لا تثبت ملكيته. احتفظ برمز الـ OTP نفسه، وفكّر في حدود أقل للدول التي نادرًا ما تخدمها.
استخدم القواعد المخصّصة لتعليم بادئات أو مشغّلين كاملين كغير صالحين، وفعّل التنبيهات لأحداث spam_phone. ذو صلة: منع الحسابات الوهمية.
وجدت خطأ؟ أخبرنا عبر صفحة التواصل. تواصل معنا