راهنمای فنی

پیامک پترن و OTP: راهنمای کامل پیاده‌سازی ورود امن با پیامک

تفاوت پیامک پترن با پیامک عادی، طراحی درست کد یک‌بارمصرف، محدودسازی نرخ درخواست و نمونهٔ کد اتصال به API.

کد یک‌بارمصرف (OTP) رایج‌ترین کاربرد پیامک در محصولات نرم‌افزاری است. برای اینکه هم قابل‌اعتماد باشد و هم امن، باید از پیامک پترن و چند قاعدهٔ ساده استفاده کنید.

چرا پیامک پترن؟

پیامک پترن روی خطوط خدماتی ارسال می‌شود و حتی برای کاربرانی که تبلیغات را در سامانهٔ «۱۰۸۸» مسدود کرده‌اند هم تحویل داده می‌شود. الگوی پیام از قبل ثبت و تأیید می‌شود و شما فقط مقادیر متغیر را می‌فرستید.

مثال الگو:

کد ورود شما به {brand}: {code}
این کد تا {minutes} دقیقه معتبر است.

قواعد طراحی کد یک‌بارمصرف

  • طول کد: ۵ یا ۶ رقم. کمتر از ۵ رقم امنیت کافی ندارد.
  • انقضا: بین ۲ تا ۵ دقیقه. کد منقضی‌شده باید از پایگاه داده حذف یا بی‌اثر شود.
  • یک‌بار مصرف واقعی: پس از استفادهٔ موفق، کد باطل شود.
  • عدم فاش شدن در لاگ: کد را در لاگ سرور یا ابزارهای رصد ذخیره نکنید.

جلوگیری از سوءاستفاده

تهدید راهکار
ارسال انبوه به یک شماره حداکثر ۱ پیام در ۶۰ ثانیه و ۵ پیام در ساعت برای هر شماره
حدس زدن کد (brute-force) بعد از ۵ تلاش ناموفق، قفل موقت و درخواست کد جدید
هزینه‌تراشی رقیب محدودسازی بر اساس IP و شناسهٔ دستگاه علاوه بر شماره

نمونهٔ ارسال از طریق API

use Illuminate\Support\Facades\Http;

$code = (string) random_int(10000, 99999);

cache()->put("otp:{$mobile}", $code, now()->addMinutes(3));

Http::withToken(config('services.irnoti.key'))
    ->post('https://api.irnoti.com/v1/pattern/send', [
        'sender' => '3000XXXX',
        'recipient' => $mobile,
        'pattern_code' => 'otp_login',
        'variables' => ['code' => $code, 'minutes' => 3],
    ]);

هنگام تأیید، مقدار واردشده را با مقدار کش مقایسه کنید و در صورت تطابق، بلافاصله کلید کش را حذف کنید.

جمع‌بندی

OTP خوب یعنی: پیامک پترن روی خط خدماتی، کد کوتاه با انقضای کوتاه، ابطال پس از مصرف و محدودسازی چندلایهٔ نرخ درخواست. همین چند قاعده جلوی بیشتر مشکلات امنیتی و هزینه‌ای را می‌گیرد.

اشتراک‌گذاری: تلگرام توییتر واتساپ