- بواسطة x32x01 ||
حماية الباك إند من البداية صح 🔐
🚨 "هو شغال؟ خلاص ما تلمسوش!"
جملة بنسمعها كتير أول ما السيرفر يشتغل من غير Errors 😅
بس خلّيك فاكر دايمًا: شغال ≠ آمن ❌
ممكن يكون الباك إند شغال زي الفل… بس مفتوح على البحري لأي هاكر 👨💻🔥
تعالى نشوف أهم أساسيات تأمين الباك إند حتى لو المشروع صغير 👇
المستخدم يقدر يبعت بيانات فيها كود خبيث زي XSS.
🎯 سيناريو واقعي
يوزر يحط
✅ الحل
تتحقق من البيانات وتنضفها قبل ما تخزنها أو تستخدمها.
📌 استخدم مكتبات زي express-validator أو zod وخلي البيانات دايمًا تحت السيطرة.
🎯 سيناريو
يوزر معاه JWT
يحاول يدخل صفحة Admin وهو مش أدمن أصلاً!
✅ الحل الصح
هاكر يعمل 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"
});
💭 الخلاصة
حتى لو شغال على مشروع صغير 👶 لازم تحط أساسيات الأمان من الأول.الهاكر:
- مش مستني مشروع ضخم
- ولا شركة عالمية
🔐 أمان الباك إند مش رفاهية… ده أساس.