روش های امن برای ذخیره پسورد در دیتابیس mysql

۱۳۹۶-۰۹-۱۹
402
1 دیدگاه
روش های امن برای ذخیره پسورد در دیتابیس mysqlReviewed by کارگاه توسعه on Dec 10Rating:

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

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

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

فرض کنید سایت شما ۱۰۰۰ کاربر فعال دارد ، اگر به هر دلیلی دیتابیس شما مورد نفوذ هکر قرار بگیرد ، تمام اطلاعات کاربران از جمله پسورد آنها در اختیار هکر قرار میگیرد ، به همین منظور پسورد های ذخیره شده درون دیتابیس ، همیشه باید بصورت کدگذاری شده ذخیره شوند تا در صورت سرقت رفتن آنها ، هیچ سودی برای هکر نداشته باشد و یا اینکه کار آنها را برای پیدا کردن پسورد بسیار سخت تر سازند .

 

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

برای اینکه بتوانیم پسورد های کاربران سایتمان را بصورت هش شده درون دیتابیس ذخیره کنیم ، روش ها و توابع متعددی وجود دارد .

 

۱- استفاده از تابع md5() در PHP

با این تابع میتوان یک رشته را به یک رشته ۳۲ کاراکتری هش شده تبدیل کرد .

بطور مثال میخواهیم کلمه password را با استفاده از روش md5 هش کنیم .

نتیجه : ۵f4dcc3b5aa765d61d8327deb882cf99

این روش میتواند روش خوبی برای ذخیره پسورد باشد ، اما آیا این بهترین روش است ؟

قطعا روش هایی وجود دارند تا بتوانند پسورد هش شده با استفاده از روش md5 hash را دیکد کنند ، بنابراین استفاده از این تابع به تنهایی نمیتواند امنیت بالا را تامین کند .

 

۲- روش دوم ، تابع sha1() در PHP

این تابع با یک الگوریتم متفاوت از تابع قبلی عمل کرده و رشته شما را به یک رشته هش شده ۴۰ کاراکتری تبدیل می کند .

بطور مثال میخواهیم کلمه password را با استفاده از روش sha1  هش کنیم .

نتیجه : ۵baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

اما باز هم همانند تابع قبلی ، نمیتواند بهترین روش برای ما باشد .

:: پس بهترین روش کدام است ؟!

بهترین روش ، طراحی یک الگوریتم منحصربه فرد با استفاده از توابع بالا و روش Salting می باشد ؛ این روش میتواند یک راهکار مناسب و مطمئن برای ذخیره سازی پسورد در دیتابیس mysql باشد .

:: روش Salting چیست ؟

function hash($str){
    $salt = "SaltText";
    $hash = sha1($str . md5($salt));
    return $hash ;
}

 

همانطور که در کدهای بالا مشاهده می شود ، یک رشته دلخواه را درون متغیر $salt ذخیره کردیم و آنرا با استفاده از تابع md5 ایکد کردیم . حال این رشته ۳۲ عددی ، با مقدار $str جمع شده و مجددا توسط تابع sha1 هش می شود .

نتیجه ای که در خروجی بدست می آید ترکیبی از متن Salt ، تابع md5 و sha1 می باشد که از امنیت خوبی برخوردار است .

توجه : متغیر $str همان رشته ایست که برای هش شدن وارد تابع می گردد .

کدی که در بالا نوشتیم ، یک ساختار ساده برای هش کردن بود ؛ شما میتوانید این ساختار را به هر شکلی تغییر داده و آنرا گسترش دهید .

دیدگاه شما

( الزامي )

(الزامي)



منتظر قالب جدید کارگاه توسعه همراه با امکانات فوق العاده آن باشید ...!