رفتن به محتوای اصلی
iServer24 | ارائه‌کننده سرورهای ابری و اختصاصی
مدیریت امن رمز عبور در جاوااسکریپت با BcryptJS

مدیریت امن رمز عبور در جاوااسکریپت با BcryptJS

محافظت از رمزهای عبور کاربران یکی از مهم‌ترین وظایف هر توسعه‌دهنده است. ذخیره کردن پسورد به صورت متن ساده یک فاجعه امنیتی محسوب می‌شود. در اکوسیستم جاوااسکریپت، کتابخانه BcryptJS امکان هش کردن امن رمزها را فراهم می‌کند تا حتی در صورت نشت دیتابیس، پسوردها قابل استفاده نباشند.

محافظت از رمزهای عبور کاربران یکی از مهم‌ترین وظایف هر توسعه‌دهنده است. ذخیره کردن پسورد به صورت متن ساده یک فاجعه امنیتی محسوب می‌شود. در اکوسیستم جاوااسکریپت، کتابخانه 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) را می‌گیرد.


ساختار پروژه

فایل‌ها:

4 خط
app.js
auth.js
db.js
User.js
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

نصب پکیج‌ها:

2 خط
npm init -y
npm install express mongoose bcryptjs nodemon
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

اتصال به MongoDB (db.js)

13 خط
const mongoose = require("mongoose");
const mongoURI = "mongodb://127.0.0.1:27017/bcrypt_database";

const connectMongo = async () => {
  try {
    await mongoose.connect(mongoURI);
    console.log("Connected to MongoDB!");
  } catch (error) {
    console.error("MongoDB Error:", error.message);
  }
};

module.exports = connectMongo;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت مدل کاربر (User.js)

8 خط
const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema({
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});

module.exports = mongoose.model("user", UserSchema);
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

راه‌اندازی سرور (app.js)

12 خط
const connectToMongo = require("./db");
const express = require("express");

const app = express();
connectToMongo();

app.use(express.json());
app.use("/auth", require("./auth"));

app.listen(3300, () => {
  console.log("Server running on port 3300");
});
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ثبت‌نام کاربر با هش رمز (auth.js)

16 خط
const express = require("express");
const router = express.Router();
const User = require("./User");
const bcrypt = require("bcryptjs");

router.post("/signup", async (req, res) => {
  const salt = await bcrypt.genSalt(10);
  const secPass = await bcrypt.hash(req.body.password, salt);

  const user = await User.create({
    email: req.body.email,
    password: secPass,
  });

  res.json({ user });
});
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ورود کاربر و مقایسه رمز

11 خط
router.post("/login", async (req, res) => {
  const user = await User.findOne({ email: req.body.email });
  if (!user) return res.status(400).json({ error: "Invalid credentials" });

  const match = await bcrypt.compare(req.body.password, user.password);
  if (!match) return res.status(400).json({ error: "Invalid credentials" });

  res.json({ success: "Authenticated!" });
});

module.exports = router;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

روند کار چگونه است؟

تعداد Salt Roundsسرعت هش کردنسطح امنیت
۸ تا ۱۰سریعمناسب پروژه‌های عمومی
۱۲متوسطمقدار توصیه‌شده و متعادل
۱۴ به بالاکندامنیت بسیار بالا، مصرف پردازش بیشتر
  1. کاربر رمز را ارسال می‌کند

  2. سرور رمز را هش + سالت می‌کند

  3. هش در دیتابیس ذخیره می‌شود

  4. هنگام ورود، رمز جدید با هش قبلی مقایسه می‌شود

  5. اگر برابر بود، کاربر احراز هویت می‌شود


جمع‌بندی

در این آموزش یاد گرفتید چطور:

  • رمزها را به صورت امن هش کنید

  • آن‌ها را در MongoDB ذخیره کنید

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

این پایه امنیتی هر سیستم احراز هویت مدرن است. برای ارتقای امنیت می‌توانید توکن‌های JWT، محدودسازی تلاش‌های ورود و HTTPS را نیز اضافه کنید.

زیرساخت ابری برای اجرای همین آموزش

سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

ادامه یادگیری:Docker·Ubuntu·VPS