در ادامه نوشته قبلی که به معرفی اولیه Authentication و Authorization پرداختیم در این نوشته می خواهیم به صورت جامع و دقیق به بحث در مورد Authentication بپردازیم.در ابتدا این سوال را مطرح می کنم که چگونه باید احراز هویت را در یک سیستم نرم افزاری تحت وب پیاده سازی و کنترل نماییم.
برای این منظور ما نیاز به نگهداری اطلاعات کاربری از قبیل نام کاربری، رمز عبور ، فعال بودن یا نبودن کاربر، زمان های ورود به سیستم و سایر موارد مرتبط را در دیتابیس خود نگهداری نماییم.در اطلاعات کاربری هر کاربر به طور معمول یک نام کاربری (Password) غیرتکراری و یکتا خواهد داشت.همچنین نیاز به یک رمز عبور(Password) مطمئن که براحتی قابل حدس زدن نباشد و ترکیبی از حروف، اعداد و کاراکترها باشد.این دو ویژگی از مهم ترین بخش های Authentication می باشند.موارد دیگری همچون ساعات دسترسی مجاز کاربر برای ورود به سیستم، آدرس های (IP) مجاز برای ورود، تعداد مجاز ورود اشتباه رمز عبور پشت سرهم و مواردی از این قبیل نیز که ما بسته به نیاز و شرایط نرم افزار و میزان اهمیت آن باید این موارد را رعایت نماییم.ما نباید در میزان امنیت نرم افزار افراط و تفریط کنیم و بسته به اهمیت و ماهیت سیستم درجه امنیتی را زیاد و کم نماییم.به طور مثال در یک سیستم نرم افزاری فروشگاه آنلاین نیاز چندانی نیست که کاربر مجبور به وارد کردن رمزهای طولانی و ترکیبی سخت گردد.اما در مقابل در یک سیستم مالی مثل اینترنت بانک باید تمامی این موارد در سطح بالایی رعایت شود و این روال نیز به کاربران سیستم به روش های مختلف آموزش داده شود تا کاربر متوجه شود که این سخت گیری ها برای امنیت بیشتر وی است.
در بحث فنی و پیاده سازی Authentication ما باید رمز عبور (Password) را همیشه به صورت Hashشده (رمزنگاری یک طرفه ) در دیتابیس نگهداری نماییم.رمزنگاری که به صورت یک طرفه و غیرقابل برگشت باشد را Hash می نامیم.برای این کار الگوریتم های مختلفی وجود دارد که هر کدام میزان سختی خود را دارند.مثلا MD5 که الگوریتم و کلاسی قدرتمند در این زمینه می باشد.در سایت MD5 Generator شما می توانید به صورت آنلاین رمز یکطرفه تولید نمایید.
چرا باید رمز عبور کاربران را به صورت رمز نگاری یکطرفه در دیتابیس نگهداری نماییم؟ در جواب باید گفت برای حفظ امنیت بیشتر اطلاعات کاربران و نرم افزار این کار انجام می شود.زیرا اگر فردی به دیتابیس شما دسترسی پیدا کند و رمزهای عبور Hash نشده باشد کلیه کاربران با مشکل مواجه می شوند چون در اکثر سیستم های دیگر نیز با همین رمز عبور ثبت نام نموده اند.در سال های نه چندان دور یکی از کارمندان شرکت های فعال در حوزه بانکی کشور اطلاعات کارتی چندین هزار مشتری بانکی خاص را در اینترنت قرار داد و از آن روز آن شرکت اعتبار خود را در این حوزه از دست داده است.
برای همین بحث Hash را بسیار جدی گرفته و آن را در نرم افزارهای خود پیاده سازی و رعایت کنید.شما باید همیشه از یک الگوریتم Hash در یک نرم افزار استفاده نمایید.برای اینکه زمانی که کاربر در سایت شما ثبت نام (Register) می کند رمز عبور وارد شده به صورت رمزشده یکطرفه در دیتابیس ذخیره می شود و زمانی که مجددا وی قصد ورود به سیستم را داشت، رمز وارد شده در هنگام ورود نیز به صورت Hash درآمده و با مقدار موجود در دیتابیس مقایسه می شود و درصورت یکسان بودن کاربر وارد نرم افزار شود.
طول رمز عبور و ترکیبی بودن آن مانند شامل اعداد و کاراکترهای خاص بودن باعث می شود حدس زدن آن سخت تر گردد.ما به عنوان کاربرمعمول سیستم ها باید تلاش نمایید که رمزهای عبور امنی برای خود داشته باشیم تا کمتر دچار مشکل شویم.
دیگر موارد تکمیلی که در بحث احراز هویت اهمیت دارد استفاده از ورود دو مرحله ای در نرم افزار است.به طوریکه کاربر در ابتدا با نام کاربری و رمز عبور وارد نرم افزاشده و در این مرحله نرم افزار کدی را به شماره وی اس ام اس می کند که کاربر باید این کد را در قسمت مربوطه وارد نماید تا وارد قسمت دلخواه در نرم افزار شود.
بحث پایانی در این نوشته نیز مربوط به عبارات امنیتی (Captcha) می باشد.Captchaبرای مقابله با ربات ها طراحی شد.در صورت نبود Captcha فرد مهاجم توسط رباتی که نوشته می تواند وب سایت را با نام کاربری و رمز عبورهای بیشماری تست نماید تا راه نفوذی به نرم افزار پیدا نماید.اما Captcha از این کار جلوگیری می کند.
در این نوشته سعی کردم شما را با بحث های اولیه احراز هویت آشنا کنم.امیدوارم در نوشته های بعدی با جزئیات بیشتری از این بخش ها آشنا شویم.امنیت نرم افزار را با رعایت اصول ساده می توان ارتقا بخشید و از بروز مشکلات اساسی جلوگیری نمد.
در شماره بعدی با بحث دسترسی ها (Authorization) آشنا خواهیم شد.