راهنمای پیادهسازی امن و سریع کد تأیید (OTP)
بهترین روشهای ارسال و بررسی کد یکبارمصرف: طول و عمر کد، محدودیت نرخ، پترن، تجربهٔ کاربری ورودی و جایگزینهایی مثل ربات بله و تلگرام.
زمان مطالعه: ۲ دقیقه · آخرین بروزرسانی:
چرا OTP؟
کد یکبارمصرف سادهترین راه اثبات مالکیت شمارهٔ موبایل است و رمز عبور را از مدار خارج میکند. اما پیادهسازی ضعیف آن، دری برای سوءاستفاده و هزینهٔ بیدلیل باز میکند.
ویژگیهای یک کد درست
- طول ۶ رقم برای اغلب سرویسها مناسب است و ۴ رقم را بهسادگی میتوان حدس زد.
- تولید با مولد تصادفی امن، نه ساعت یا شمارنده.
- عمر کوتاه، معمولاً ۲ تا ۵ دقیقه، و ابطال پس از اولین استفادهٔ موفق.
- ذخیرهٔ هش کد، نه خود کد، و مقایسه با زمان ثابت.
- سقف تعداد تلاش برای هر کد (مثلاً ۵ بار) و قفل موقت پس از آن.
جلوگیری از سوءاستفاده
مهاجمان ممکن است فرم شما را برای بمباران پیامکی شمارهٔ دیگران یا تخلیهٔ اعتبار حساب شما استفاده کنند. چند لایه ایجاد کنید:
- محدودیت نرخ برای هر شماره و هر IP.
- فاصلهٔ حداقلی بین دو درخواست (مثلاً ۶۰ ثانیه) و شمارندهٔ معکوس در رابط.
- کپچا پیش از ارسال پیامک برای کاربران ناشناس.
- سقف روزانه برای هر شماره.
- هشدار و گزارش برای الگوهای غیرعادی.
پترن و مسیر سریع
قالب ثابت تأییدشده (پترن) با متغیر کد، هم سریعتر ارسال میشود و هم از رد شدن محتوا جلوگیری میکند. متن را کوتاه نگه دارید تا از یک بخش پیامک تجاوز نکند؛ نمونه:
«کد تأیید شما در [نام برند]: ۴۸۲۹۱۳. این کد را به کسی نگویید.»
تجربهٔ کاربری ورودی
ورودی چندکادری با پرش خودکار و ثبت پس از رقم آخر، خطا را کم میکند. در موبایل از قابلیت تکمیل خودکار از پیامک (WebOTP / autocomplete="one-time-code") استفاده کنید تا کاربر کد را دستی تایپ نکند.
جایگزینها
برای کاهش هزینه یا زمانی که پیامک دیر میرسد، ارسال کد در پیامرسانهایی مثل بله و تلگرام از طریق ربات یا لینک تأیید یککلیک گزینهٔ مناسبی است. بهتر است همیشه یک راه جایگزین برای کاربر باقی بماند.
سوالات متداول
کد را چند بار میتوان دوباره فرستاد؟
بهتر است سقف بگذارید (مثلاً ۳ بار در ساعت) و هر بار کد قبلی را باطل کنید.
آیا باید کد را در لاگ ثبت کنم؟
خیر. کد خام یا هش آن را در لاگهای عمومی نگه ندارید.