لاگین با رمز یکبار مصرف (OTP Authentication) در php

  • آپدیت شده در تاریخ

لاگین با رمز یکبار مصرف (کد OTP) در php

لاگین با رمز یکبار مصرف یک روش امن برای فرایند لاگین شدن کاربر به سیستم است . در این روش ، یک رمز یکبار مصرف به اصطلاح توکن (token) به صورت تصادفی ایجاد و به فردی که قصد ورود را دارد ارسال می شود.

OTP یا رمز یکبار مصرف به ایمیل کاربر یا از طریق پیامک به گوشی موبایل کاربر ارسال می شود . زمانی که کاربر کد OTP را وارد کند ، اپلیکیشن احراز هویت را بر اساس این کد انجام می دهد. دقیقا روشی که برای بسیاری از پیام رسان ها مثل تلگرام ، واتساپ و… استفاده می شود.

یکی از روش های جلوگیری از حدس زدن کلمات عبور ضعیف و نامناسب، استفاده از رمزهای یک بار مصرف(One Time Password) می باشد.

در این آموزش قصد داریم ، یک مثال ساده از لاگین با رمز یکبار مصرف (OTP Authentication) در php توسط ایمیل را ببینیم .

در این مثال ، زمانی که کاربر ثبت نام کرده ایمیل خود را برای لاگین وارد کرد ، یک کد OTP به ایمیل کاربر ارسال می شود ، توسط این کد OTP اعتبارسنجی انجام می شود.زمانی که کاربر ار این کد یکبار استفاده کرد ، کد منقضی می شود ، به این معنی که دیگر نمی تواند از آن دوباره استفاده کند. همچنین این توکن برای یک روز فعال خواهد بود ، بعد از آن منقضی و غیرقابل استفاده خواهد شد.

لاگین با رمز یکبار مصرف (OTP Authentication) در php

لاگین با رمز یکبار مصرف OTP

کد زیر به شمل یک فرم لاگین برای وارد کردن ایمیل را نشان می دهد. بعد از وارد کردن ایمیل ، یک ورودی (input) دیگر برای وارد کردن کد OTP ارسال شده به ایمیل نشان می دهد. بعد از زدن دکمه submit ، php کد را اعتبار سنجی و نتیجه احراز هویت را نشان می دهد.

 

کد php اعتبارسنجی OTP

بعد از وارد کردن ایمیل ، اسکریپت php از طریق دیتابیس بررسی می کند که آیا کاربری با این ایمیل از قبل ثبت نام کرده است یا نه ، اگر اره ، یک کد OTP 6 رقمی توسط تابع rand() در php ایجاد می شود. شما ممکن است کد های خود را به صورت های دیگه و با مکانیزم های دیگه ایجاد کنید . این کد توسط PHPmailer به ایمیل کاربر ارسال می شود

لاگین با رمز یکبار مصرف (OTP Authentication) در php

زمانی که کاربر کد OTP را وارد می کند ، کد از نظر زمان انقضا بررسی می شود . این کد فقط برای یک روز قابل استفاده است و بعد از آن منقضی می شود . کد php به اینصورت است :

برای دانلود پروژه و کد های لاگین با رمز یکبار مصرف (OTP Authentication) در php از باکس دانلود استفاده کنید.

موفق و پیروز باشید.

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۲۶)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. محمود رنجبر ۳ آبان ۱۴۰۱

    سلام مهندس شفیعی وقت بخیر دو تا سوال دارم
    یک
    من رو سایتم از کاربر هم نام کاربری و هم ایمیل رو از کاربر میگیرم الان تو خیلی از سایتهای معروف دنیا همون ایمیل رو هم برای نام کاربری و هم برای فراموشی رمز میگیرن میخوام بدونم به لحاظ امنیتی ایراد خاصی که نداره درسته ؟ برای ورود از کپچای محاسباتی هم استفاده میکنم
    سوال دو
    برای کنترل بعضی از ورودی های کاربر من از تابع preg match و preg replace استفاده میکنم آیا این دو تابع توسط هکر قابل دور زدن هست ؟
    سپاس از نت پارادیس

    پاسخ
    1. حسن شفیعی ۳ آبان ۱۴۰۱

      سلام. ممنون
      نه استفاده فقط از ایمیل مشکلی نداره
      نه قابل دور زدن نیست چون از فیلتر دستی برای شناسایی کاراکتر ها و جایگزین استفاده می کنید

      پاسخ
  2. محمود رنجبر ۶ تیر ۱۴۰۱

    سلام مهندس شفیعی وقت بخیر اگر برای ورود به پنل ادمین فقط برای ایمیل خودم کد یکبار مصرف ارسال کنم و وارد بشم آیا این قابل دور زدن هست توسط هکر

    پاسخ
    1. حسن شفیعی ۶ تیر ۱۴۰۱

      سلام ممنون
      خیر قابل دور زدن نیست

      پاسخ
  3. صبا ۱۳ بهمن ۱۴۰۰

    سلام، ممنون از آموزش خوبتون.
    میشه توضیح بدین درمورد otp از طریق پیامک باید چه کار کرد؟ باید از سامانه های ارسال پیامک استفاده کرد؟

    پاسخ
    1. حسن شفیعی ۱۳ بهمن ۱۴۰۰

      سلام ممنون بله باید اون رمز‌ یکبارمصرف ایجاد شده رو برای کاربر پیام ارسال کنید که از سرویس های پیامکی که وجود داره باید داخل‌کد استفاده کنید

      پاسخ
  4. میلاد ۳۰ فروردین ۱۴۰۰

    سلام میشه خواهش کنم برای استفاده از این آموزش در لاراول یه مقدار توضیح بدین؟
    واقعا ممنونم.

    پاسخ
    1. حسن شفیعی ۳۰ فروردین ۱۴۰۰

      سلام. کدها رو بررسی کنید چیز خاصی مربوط به لاراول نداره همون کدهای ساده php هست و تابعی از لاراول استفاده نمیشه

      پاسخ
  5. ایمان ۱۸ اسفند ۱۳۹۸

    سلام
    اگه میشه در مورد اضافه کردن ورود دو مرحله ای با اپ گوگل Authentication در پی اچ پی و لاگین / ثبت نام در جیمیل با پی اچ پی هم آموزش بزارین ممنون میشم.
    از زحمات تون سپاسگذارم.

    پاسخ
    1. حسن شفیعی ۱۸ اسفند ۱۳۹۸

      سلام. بفرمایید :
      عضویت و لاگین در سایت با گوگل
      موفق باشید.

      پاسخ
      1. ایمان ۲۰ اسفند ۱۳۹۸

        سلام
        خیلی ممنونم.
        در مورد اپ گوگل Authentication هم می گفتید.
        برای ورود دو مرحله ای و افزایش امنیت.
        با تشکر.

        پاسخ
      2. حسن شفیعی ۲۰ اسفند ۱۳۹۸

        سلام. خوشحالیم که مفید واقع شده.
        اینجا آموزشش قرار داده شده :
        عضویت و لاگین در سایت با گوگل
        موفق باشید.

        پاسخ
      3. ایمان ۲۰ اسفند ۱۳۹۸

        سلام
        منظورم این بود :
        https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en
        رمز ساز گوگل که برخی سایت ها دارن ، بیشتر سایت های مالی.

        پاسخ
      4. حسن شفیعی ۲۰ اسفند ۱۳۹۸

        سلام. در مورد این اطلاعی ندارم.

        پاسخ
  6. a.h.a ۱۵ تیر ۱۳۹۸

    در اتصال به ایمیل هم مشکل داره کد های (لاگین با رمز یکبار مصرف (OTP Authentication) در php) مشکل نساختن otp داره! چرا؟

    پاسخ
    1. حسن شفیعی ۱۵ تیر ۱۳۹۸

      مشکل ایمیل که کتابخانه phpmailer بود که باید اضافه می شد که می توانید از باکس دانلود دریافت کنید.
      مشکل ایجاد شدن کد هم ممکن است که اتصال یا جداول دیتابیس مشکل داشته باشد که از فایل sql خود فایل دانلود استفاده و کانکشن دیتابیس رو هم چک کنید.
      موفق باشید.

      پاسخ
  7. a.h.a ۱۵ تیر ۱۳۹۸

    می شود در باره اتصال به ان توضیح دهید فقط در فایل functions.phpمشکل دارم؟ایا میتوانید برایم این مشکل را حل کنید؟

    پاسخ
    1. حسن شفیعی ۱۵ تیر ۱۳۹۸

      سلام. مشکل نبود کتابخانه phpmailer هست که همینک به سورس آماده باکس دانلود اضافه شد مجدد دانلود و استفاده کنید.

      پاسخ
  8. a.h.a ۱۵ تیر ۱۳۹۸

    باسلام چگونه پنل پارس گرین را به فایل گذاشته شده در تایید شماره موبایل با SMS در PHP متصل کنم؟

    پاسخ
    1. حسن شفیعی ۱۵ تیر ۱۳۹۸

      سلام. اطلاعی از این پنل ندارم. در سایت خود پنل ارایه دهنده به دنبال بخش هایی مثل توسعه دهنده یا کد نمونه باشید. مطمینا فایل یا کلاس آماده php را برای این کار قرار دادند که میتونید در پروژه خودتون استفاده کنید.
      موفق باشید.

      پاسخ
  9. hosein ۹ خرداد ۱۳۹۸

    سلام من میخوام این اعتبارسنج به فرم ثبت نام و ورود که در همین سایت اموزش داده بودید اجرا کنم که بعد ثبت نام جای این که داخل فرم ورود اول اعتبارسنجی بشه بعد اگه درست بود فرستاده بشه فرم ورود لطفا مانند رمز جدید اینم به قالب تون اضافه کنید یا بگید کجای کد باید عوض کنم ممنون

    پاسخ
    1. حسن شفیعی ۹ خرداد ۱۳۹۸

      سلام.
      شما باید یک فرم دو مرحله ای برای بخش ورود ایجاد کنید (ساخت فرم چند مرحله ای با php ) به اینصورت که کاربر بعد از وارد کردن ایمیل یا نام کاربری وارد فرم دوم شود که این فرم هم در این آموزش که هستید ساخته شده و کدهاش وجود داره و بعد در این حین شما در سمت php این بخش رمز یکبار مصرف را که باز در این آموزش توضیح داده شده را اضافه کنید تا رمز تصادفی را ساخته و در سطر کاربر در دیتابیس ذخیره و سپس آن را برای کاربر ایمیل کنید.
      در این فرم مرحله دوم شما باید کد را از کاربر گرفته و باز در دیتابیس query بزنید تا ببینید آیا هر دو رمز یکسان است یا خیر (که باز کدهاش بالا موجوده). اگر یکسان بود یک سیشن ست می کنید و کاربر را لاگین می کنید که کد این عملیات هم در آموزش ساخت صفحه لاگین که قبلا دیدید هست و در این آموزش هم قرار دادیم.

      به هر حال ترکیب این دو مورد کمی دقت بیشتری میخواد تا نتیجه درست بدست بیاد.

      موفق باشید.

      پاسخ
  10. Ehsan ۵ فروردین ۱۳۹۷

    سلام خسته نباشين
    مرسي بايت همه مطالب سايت
    كد بار مصرف رو كجا ذخيره مي كنيد؟
    اگه رو نشست باشه عمرش برابر با عمر نشست هست
    و اگه رو پايگاه داده باشه بحث زمان مطرح مي شه در حقيقت تو اين روش دوبار به پايگاه داده وصل مي شيم

    پاسخ
    1. حسن شفیعی ۵ فروردین ۱۳۹۷

      سلام .ممنونم.
      همانطور که سورس مشخص است در دیتابیس mysql ذخیره میشه .
      میتونید در نشست ذخیره کنید و طبق تعیین تاریخ انقضا session در php , یک تاریخ expiration تعریف کنید.

      در هر دو حالت به خوبی کار میکنه و بستگی به سلیقه شما داره .

      موفق باشید.

      پاسخ
  11. حامد ۱۷ دی ۱۳۹۶

    سلام میشه یک نمونه ۲ صفحه html یا php رو بهم با این سورس وصل کنید تا بنده بیشتر متوجه بشم . اگر زحمتی نیست.

    بنده میخوام یک صفحه عمومی که برای همه قابل دسترس است رو با این سورس مخفی یا غیر قابل دسترس کنم و تا زمانی که کاربر ایمیل خودشو تایید نکرده اون صفحه رو نتونه مشاهده کنه . طوری باشه که بعد از کلیک روی لینک فعالسازی به اون صفحه دسترسی داشته باشه.

    اگر زحمتی نیست میشه کمی بیشتر راهنماییم کنید خیل ممنون.
    اگر از لحاظ نمی توانید فایل رو در سایت برای عموم نمایش دهید به ایمیل بنده ارسال کنید.
    ممنون میشم.

    پاسخ
    1. حسن شفیعی ۱۷ دی ۱۳۹۶

      سلام . نمونه فایل های قرار داده شده بسیار واضح است . اگر نمونه مشابه تری به کار خود که نیاز به ویرایش کمتری دارد را می خواهید این پست را مطالعه کنید.

      https://netparadis.com/email-verification-register-php
      اگر تسلط کافی بر روی این موضوع و php ندارید بهتر است برای پیاده سازی این قابلیت در cms خود از یک برنامه نویسی کمک بگیرید تا قابلیت مورد نظر را برای شما پیاده سازی کند
      موفق و پیروز باشید

      پاسخ
دوره های آموزشی