محافظت از رمزهای عبور کاربران یکی از مهمترین وظایف هر توسعهدهنده است. ذخیره کردن پسورد به صورت متن ساده یک فاجعه امنیتی محسوب میشود. در اکوسیستم جاوااسکریپت، کتابخانه BcryptJS امکان هش کردن امن رمزها را فراهم میکند تا حتی در صورت نشت دیتابیس، پسوردها قابل استفاده نباشند.
در این آموزش یاد میگیرید چگونه با استفاده از Node.js، Express و MongoDB یک سرور ساده بسازید که:
-
رمز عبور را به صورت هششده ذخیره کند
-
هنگام ورود کاربر، رمز را با هش ذخیرهشده مقایسه کند
پیشنیازها
برای اجرای این پروژه باید موارد زیر را داشته باشید:
-
Node.js نسخه 12 یا بالاتر
-
آشنایی با JavaScript
-
نصب Express.js
-
دیتابیس MongoDB (نسخه محلی یا Atlas)
چرا BcryptJS؟
Bcrypt یک الگوریتم هش مخصوص رمز عبور است که در برابر حملات بسیار مقاوم طراحی شده. نسخه BcryptJS پیادهسازی جاوااسکریپتی همین الگوریتم است.
مزایا:
امنیت بالا
Bcrypt عمداً کند طراحی شده. این کند بودن باعث میشود حملات brute-force بسیار سخت و زمانبر شوند.
استفاده از Salt
برای هر رمز، یک رشته تصادفی (Salt) ساخته میشود. این کار باعث میشود حتی اگر دو کاربر رمز یکسان داشته باشند، هش آنها متفاوت باشد.
استفاده آسان
بدون نیاز به درک عمیق رمزنگاری، میتوانید رمزها را ایمن کنید.
هشینگ و سالت چیست؟
Hashing (هش کردن)
تبدیل متن ساده به رشتهای غیرقابل بازگشت. ویژگیها:
-
یکطرفه است (قابل برعکس کردن نیست)
-
برای یک ورودی مشخص همیشه خروجی ثابت میدهد
-
برای ذخیره اطلاعات حساس عالی است
Salting
افزودن داده تصادفی به رمز قبل از هش شدن. این کار جلوی حملات جدول رنگینکمانی (Rainbow Table) را میگیرد.
ساختار پروژه
فایلها:
نصب پکیجها:
اتصال به MongoDB (db.js)
ساخت مدل کاربر (User.js)
راهاندازی سرور (app.js)
ثبتنام کاربر با هش رمز (auth.js)
ورود کاربر و مقایسه رمز
روند کار چگونه است؟
-
کاربر رمز را ارسال میکند
-
سرور رمز را هش + سالت میکند
-
هش در دیتابیس ذخیره میشود
-
هنگام ورود، رمز جدید با هش قبلی مقایسه میشود
-
اگر برابر بود، کاربر احراز هویت میشود
جمعبندی
در این آموزش یاد گرفتید چطور:
-
رمزها را به صورت امن هش کنید
-
آنها را در MongoDB ذخیره کنید
-
هنگام ورود کاربر اعتبارسنجی انجام دهید
این پایه امنیتی هر سیستم احراز هویت مدرن است. برای ارتقای امنیت میتوانید توکنهای JWT، محدودسازی تلاشهای ورود و HTTPS را نیز اضافه کنید.

