اعتبارسنجی رمز عبور یا پسورد (Password) در PHP

2 118

با سلام خدمت شما عزیزان، تا این قسمت که با من همراه بوده اید، تمامی تگ های ورودی به غیر از پسورد را در پروژه فروشگاه اینترنتی با همدیگر اعتبارسنجی کردیم و محدودیتهایی را روی آنها اعمال کردیم. در این بخش به سراغ اعتبارسنجی پسورد با PHP می رویم و به کمک عبارات با قاعده یا Regular Expression این کار را انجام می دهیم.

چگونه برای صفحه ثبت نام، تایید پسورد بسازیم؟

اگر شما به قسمت ثبت نام سایت های بزرگ سر زده باشید، متوجه می شوید که علاوه بر پسورد، این سایت ها تایید پسورد را نیز از کاربر درخواست می کنند.

یعنی به گونه ای اعتبارسنجی روی پسورد صورت می گیرد که کاربر از پسورد انتخابی خود کاملا مطمئن باشد. خب اگر wamp را روشن کنید و به مرورگر خود بروید و آدرس http://localhost/ecommerce/customer_register.php را وارد کنید، متوجه می شوید که این اعتبارسنجی وجود ندارد.

به تصویر زیر نگاه کنید.

نمایش فیلد تایید پسورد در فرم ثبت نام

برای اینکه این تگ ورودی، در صفحه ثبت نام سایت دیده شود، کافی است که به آدرس C:\wamp\www\ecommerce بروید و فایل customer_register.php را با استفاده از Notepad++ باز کرده و کدهای زیر را در آن پیدا کنید.

آن را پاک کنید و به جای آنها، کدهای زیر را قرار دهید.

حال مجددا مرورگر را رفرش کنید، همانطور که در تصویر زیر مشاهده می کنید، تگ ورودی “پسورد را دوباره وارد نمایید:” برای ما فعال شد.

نمایش تایید پسورد در فرم ثبت نام

بعد از انجام اینکار مقدماتی، به سراغ اعتبارسنجی پسورد وارد شده توسط کاربر می رویم و یک سری محدودیت در انتخاب پسورد قرار می دهیم.

ایجاد یک الگو (Pattern) با استفاده از عبارات با قاعده (Regular Expression) برای پسورد

همانطور که می دانید الگو پسورد (قانون هایی که ما برای انتخاب پسورد قرار می دهیم و کاربر باید با توجه به این قوانین، پسورد خودش را انتخاب کند) باید با توجه به عبارت با قاعده ساخته شود.

همانطور که در قسمت قبل ملاحظه نمودید برای اینکه ما بتوانیم رشته وردی توسط کاربر را کنترل و مدیریت کنیم؛ باید از عبارات با قاعده (Regular expression) و همچنین تابع preg_match بهره بگیریم.

چگونه یک عبارت با قاعده برای چک کردن یک پسورد پیچیده بسازیم؟

همانطور که می دانید یکی از مهمترین و اساسی ترین نکات در امنیت سایت، پسوردها هستند.

قطعا اگر سیستم ما بگونه ای باشد که کاربران بتوانند پسوردهای پیچیده ای را انتخاب کنند، به وب سایت و کاربر از لحاظ امنیتی (جلوگیری از هک شدن پروفایل کاربران و پایگاه داده سایت) کمک می کند. بنابراین هر چه میزان پیچیدگی رمز عبور بیشتر باشد، قطعا بهتر است.

همانطور که می دانید یک پسورد قوی باید به صورت ترکیبی از:

  • محدودیت در طول رشته ورودی
  • محدودیت در کاراکتر های استفاده شده (مثلا ترکیبی از حروف کوچک و بزرگ و همچنین علامتهای خاص)

باشد. در عبارت با قاعده ای که در پایین ملاحظه می کنید ما تمامی این محدودیت ها را لحاظ کرده ایم.

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

در کد بالا هر کدام از کاراکترها دارای مفهم خاصی است که در زیر به آنها اشاره می کنم:

  • /^ نشان دهنده شروع رشته است.
  • (?=.*[A-z]) باید کاراکترهای رشته وارد شده، داری حروف کوچک یا بزرگ باشند.
  • (?=.*[a-z]) باید رشته ورودی شامل حداقل یک کاراکتر کوچک باشد.
  • (?=.*[A-Z]) باید رشته ورودی شامل حداقل یک کاراکتر بزرگ باشد.
  • (?=.*[0-9]) باید رشته ورودی شامل حداقل یک رقم از 0 تا 9 باشد.
  • (?=.*[$@]) باید رشته وارد شده شامل حداقل یکی از دو علامت @ یا $ باشد.
  • \S{6,12} طول رشته ورودی باید حداقل 6 حرف و حداکثر 12.
  • $/ نشان دهنده پایان رشته است.

به صورت خلاصه، عبارت با قاعده بالا این را می گوید که یک کاربر باید رشته ای وارد نمایید که تعداد کاراکترهای آن بین 6 تا 12 کاراکتر باشد و از طرفی باید حداقل یک حرف بزرگ در آن باشد و همچنین باید حداقل یک حرف کوچک در آن باشد و ضمنا باید از ارقام و یکی از دو علامت @ و یا $ نیز در آن استفاده شود.

خب به نظر شما آیا رمزی از این پیچیده تر دیده بودید. مطمئنا این نوع رمزگذاری از حملات ربات های تخریب گر به سایت و هم چنین هکرهای حرفه ای جلوگیری می کند.

نمونه های مختلفی از الگو ها (pattern) برای اعتبارسنجی پسورد با PHP

اگر شما در فهم عبارات با قاعده حرفه ای باشید می توانید الگوهای پیچیده تری نیز ایجاد نمایید.

در جدول زیر چند نمونه ی دیگر از عبارات منظمی که می توانند به عنوان یک الگو (pattern) برای پسورد استفاده شوند، آورده ام:

عبارت منظم  توضیح  مثالهایی از مواردی که منطبق خواهند شد
^[a-zA-Z]\w{3,14}$ اولین کاراکتر رمز عبور باید یک حرف باشد، باید حداقل 4 کاراکتر و حداکثر 15 کاراکتر باشد و از کاراکترهای دیگر از جمله حرف ها، اعداد و حروف زیر استفاده شود. abcdaBc45DSD_sdf
^(?=.*\d).{4,8}$ گذرواژه باید بین 4 تا 8 کاراکتر باشد و شامل حداقل یک رقم عددی باشد. 1234 

 asdf1234

  asp123

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$ رمز عبور باید حداقل 4 کاراکتر داشته باشد و حداکثر 8 کاراکتر باشد و حداقل یک حرف بزرگ، یک حرف کوچک و یک رقم عددی داشته باشد. asD1

  asDF1234 

 ASPgo123

^([a-zA-Z0-9@*#]{8,15})$ رمز عبور باید دارای کاراکترهای رقمی و کاراکترهای خاص (@*#) باشد. ضمنا رمز عبور باید حداقل 8 کاراکتر باشد و حداکثر 15 کاراکتر باشد. @12X*567 

 1#Zv96g@*Yfasd4 

 #67jhgt@erd

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

برای انجام اینکار به آدرس C:\wamp\www\ecommerce\includes بروید و فایل server.php را باز کرده و کدهای زیر را در آن پیدا کنید.

این کدها را پاک کنید و کدهای زیر را به جای آنها قرار دهید.

همانگونه که مشاهده کردید، ما از عبارت با قاعده /^(?=.*[A-z])(?=.*[0-9])(?=.*[$@])\S{6,12}$/ برای ایجاد الگوی پسورد استفاده کرده ایم.

این عبارت منظم می گوید که کاربر باید رمزی انتخاب کند که حداقل 6 کاراکتر داشته باشد و حداکثر نیز دارای 12 کاراکتر باشد و از سوی دیگر دارای حروف کوچک یا بزرگ انگلیسی باشد و شامل رقم هایی 0 تا 9 هم باشد و ضمنا باید در آن حداقل یکی از علائم @ یا $، به کار رفته باشد.

نمایش اعتبارسنجی پسورد با PHP برای کاربران

خب این قوانین باید به اطلاع کاربر برسد که او با توجه به این قوانین، رمز انتخاب کند، بنابراین ما باید این قوانین را در معرض دید کاربر قرار دهیم.

برای نمایش اعتبارسنجی پسورد با PHP در صفحه فرم ثبت نام کاربر باید ابتدا به آدرس  C:\wamp\www\ecommerce بروید و فایل customer_register.php را باز کرده و کدهای زیر را در آن پیدا کنید.

آنها را پاک کنید و کدهای زیر را به جای آنها قرار دهید.

حالا باید سراغ فایل style.css برویم . برای این منظور به آدرس C:\wamp\www\ecommerce بروید و فایل style.css را باز کنید.  کدهای زیر را به انتهای کدهای موجود در فایل style.css اضافه نمایید.

حالا کار تمام شده است و با همدیگر به سراغ آدرس http://localhost/ecommerce/customer_register.php می رویم و نتیجه را در تصاویر زیر مشاهده می نمایید.

قوانینی که بایدکاربر هنگام به ایجاد پسورد رعایت کند

خب حالا برای اینکه این برنامه را تست کنیم ابتدا wamp را روشن کنید و در مرورگر آدرس http://localhost/ecommerce/customer_register.php را وارد نمایید و تمامی فیلد های ورودی به غیر از پسورد را با اطلاعات صحیح پر کنید، اگر فقط پسورد را ندهید تصویر زیر را خواهید دید:

نمایش پیغام خطا به هنگام اعتبارسنجی پسورد در PHP

حالا واکنشی که اعتبارسنجی پسورد با PHP به ما نشان می دهد به شکل تصویر زیر خواهد بود:

نمایش پیغام خطا در صورت وارد نکردن پسورد در اعتبارسنجی با PHP

بعد از انجام تست بالا، سراغ یک تست جدید می رویم. در این تست، همه فیلدهای ورودی را با اطلاعات صحیح وارد می کنیم ولی فیلد پسورد را با مقداری به غیر از استاندارد تعریف شده پر می کنیم (مثلا فرض کنید مقدارش را 123lkj125 داده ایم).

وب سایت در مقابل این وضعیت واکنش جدیدی از خود نشان می دهد که می توانید آن را در تصویر زیر مشاهده کنید. در واقع در این شرایط اعتبارسنجی پسورد با PHP خطایی مبتنی بر پیامهای موجود نمایش می دهد:

پیام اخطاری که وب سایت وقتی پسورد را نمی دهید به شما نشان می دهد

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

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

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

همچنین کدهای نهایی فایل style.css به صورت زیر است.

خب انشاالله تا این قسمت از آموزش، از کدنویسی سایت لذت برده باشید. در جلسه آینده به سراغ این نکته خواهیم رفت که چگونه کاربر می تواند پسورد خودش را هنگام نوشتن از حالت رمزنگاری شده خارج کند و همچنین چگونه می توان رمز وارد شده را با تایید رمز مطابقت داد.

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

ترتیبی که روکسو برای یادگیری مطالب سری فروشگاه اینترنتی با PHP به شما توصیه می‌کند:
2 نظر
  1. Majid
    0

    سلام
    ببخشید سؤالات و نظرات بنده خدمتتون میرسه؟
    دو سه تا نظر دادم ، یکی دو تا هم سؤال دارم تا اینجا
    اگ دیده میشه و پاسخ میدین خدمتتون عرض کنم؟
    سپاس

    1. روکسو
      0

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

ارسال نظر

توجه:‌ آدرس ایمیل شما منتشر نخواهد شد.