يا شباب أنا بكتب API لصفحة تسجيل الدخول (Login) باستعمال Express.js و MongoDB / Mongoose.
المطلوب:
التحقق من اسم المستخدم وكلمة السر المبعوثين من الـ Frontend وإرجاع بيانات المستخدم لو البيانات صحيحة.
المشكلة اللي مقابلاني:
اكتشفت إن أي حد ممكن يسجل دخول على أكونت الـ Admin من غير ما يكتب كلمة السر أصلاً! مجرد ما يبعت في الـ Body كائن JSON زي {"$ne": null} مكان كلمة السر، السيرفر بيمرر الطلب وبيسجل دخول فوراً! مش فاهم إزاي Mongoose بتعدي الطلب ده من غير ما تتأكد إنه String.
const express = require('express');
const User = require('./models/User'); // Mongoose Model
const app = express();
app.use(express.json());
// مسار تسجيل الدخول المصاب بالثغرة
app.post('/api/login', async (req, res) => {
const { username, password } = req.body;
// السطر المشتبه فيه: تمرير req.body مباشرة داخل الاستعلام بدون فحص النوع
const user = await User.findOne({
username: username,
password: password // لو اتنعث {"$ne": null} الاستعلام هيتنفذ كـ MongoDB Operator!
});
if (!user) {
return res.status(401).json({ message: "بيانات الدخول غير صحيحة" });
}
res.json({ message: "تم تسجيل الدخول بنجاح", user });
});
التعليقات (1)
سجّل دخولك لإضافة تعليق
تسجيل الدخول