- بواسطة x32x01 ||
حماية الباك إند من البداية صح 
"هو شغال؟ خلاص ما تلمسوش!"
جملة بنسمعها كتير أول ما السيرفر يشتغل من غير Errors
بس خلّيك فاكر دايمًا: شغال ≠ آمن
ممكن يكون الباك إند شغال زي الفل… بس مفتوح على البحري لأي هاكر

تعالى نشوف أهم أساسيات تأمين الباك إند حتى لو المشروع صغير
المشكلة
المستخدم يقدر يبعت بيانات فيها كود خبيث زي XSS.
سيناريو واقعي
يوزر يحط
الحل
تتحقق من البيانات وتنضفها قبل ما تخزنها أو تستخدمها.
استخدم مكتبات زي express-validator أو zod وخلي البيانات دايمًا تحت السيطرة.
ناس كتير بتلخبط بينهم 
سيناريو
يوزر معاه JWT
يحاول يدخل صفحة Admin وهو مش أدمن أصلاً!
الحل الصح
اعمل Middleware منفصل لكل واحدة.
سيناريو خطير
هاكر يعمل Brute Force 1000 محاولة Login في دقيقة واحدة
الحل
تحجيم عدد الطلبات باستخدام express-rate-limit
كده أي هجوم غبي هيتقفل عليه بدري.
سيناريو
السيرفر شغال HTTP .. أي حد على نفس الشبكة يسرق: التوكن - الباسورد - البيانات
الحل
موضوع Helmet كبير وهنفصّله في بوست لوحده قريب 
سيناريو كارثي
حد يفتح GitHub repo ويلاقي:
الحل
استخدم ملفات
أي حاجة حساسة = بره الكود.
سيناريو
يوزر يدخل باسورد غلط يطلعله Stack Trace كامل
الحل
ما تديش الهاكر خريطة السيرفر بإيدك.
حتى لو شغال على مشروع صغير
لازم تحط أساسيات الأمان من الأول.
الهاكر:
ثغرة واحدة بس… ولو بسيطة 
أمان الباك إند مش رفاهية… ده أساس.
جملة بنسمعها كتير أول ما السيرفر يشتغل من غير Errors
بس خلّيك فاكر دايمًا: شغال ≠ آمن
ممكن يكون الباك إند شغال زي الفل… بس مفتوح على البحري لأي هاكر
تعالى نشوف أهم أساسيات تأمين الباك إند حتى لو المشروع صغير
Input Validation & Sanitization
المستخدم يقدر يبعت بيانات فيها كود خبيث زي XSS.
يوزر يحط
<script>alert(1)</script> في فورم والسكريبت يتنفذ عند أي حد يفتح الصفحة تتحقق من البيانات وتنضفها قبل ما تخزنها أو تستخدمها.
مثال باستخدام express-validator
JavaScript:
import { body } from "express-validator";
app.post("/login", [
body("email").isEmail(),
body("password").isLength({ min: 6 }),
], (req, res) => {
// logic here
});
Authentication vs Authorization
ناس كتير بتلخبط بينهم يوزر معاه JWT
يحاول يدخل صفحة Admin وهو مش أدمن أصلاً!
- Authentication: هو مسجل دخول ولا لأ؟
- Authorization: له صلاحية يدخل الصفحة دي ولا لأ؟
JavaScript:
const isAdmin = (req, res, next) => {
if (req.user.role !== "admin") {
return res.status(403).json({ message: "Access denied" });
}
next();
};
Rate Limiting
هاكر يعمل Brute Force 1000 محاولة Login في دقيقة واحدة
تحجيم عدد الطلبات باستخدام express-rate-limit
JavaScript:
import rateLimit from "express-rate-limit";
const limiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 100,
});
app.use("/login", limiter);
Use HTTPS Only
السيرفر شغال HTTP .. أي حد على نفس الشبكة يسرق: التوكن - الباسورد - البيانات
- اشتغل دايمًا بـ HTTPS
- استخدم helmet علشان تأمّن الهيدر
JavaScript:
import helmet from "helmet";
app.use(helmet());
Don’t Expose Secrets
حد يفتح GitHub repo ويلاقي:
JWT_SECRETDB_URL
مكتوبين في الكود
استخدم ملفات
.env Code:
JWT_SECRET=super_secret_key
DB_URL=mongodb://localhost/app
process.env.JWT_SECRET
Minimal Error Messages
يوزر يدخل باسورد غلط يطلعله Stack Trace كامل
- للعميل: رسالة بسيطة
- للسيرفر: التفاصيل في الـ logs
Code:
res.status(401).json({
message: "Invalid credentials"
});
الخلاصة
حتى لو شغال على مشروع صغير الهاكر:
- مش مستني مشروع ضخم
- ولا شركة عالمية