فاينفرفاينفر
EN
برمجة 3 min read

أمان Node.js — ما يجب أن يعرفه كل مطور

Aysha Farha

Aysha Farha

April 9, 2026

بناء تطبيق قوي تحدٍّ لكل مطور. إليك بعض أفضل الممارسات التي أتبعها في مشاريعي.

تعطيل «X-Powered-By»

المشكلة:

يمكن للمهاجمين فهم معلومات الخلفية بقراءة رأس X-Powered-By وإيجاد نقاط الضعف بسهولة.

الحل:

✅ أزل الرأس بطريقة express disable.

// ExpressJs
const app = express();
app.disable('x-powered-by');

// NestJs
const app = await NestFactory.create<INestApplication & Application>(AppModule);
app.disable('x-powered-by');

// أو
import helmet from 'helmet';
app.use(helmet());

إزالة اسم «Server» من الرأس

المشكلة:

يكشف هذا الرأس برنامج الخادم الذي تستخدمه (مثل nginx أو Apache).

الحل:

// Express.js
app.use(helmet.hidePoweredBy());

// Nginx 
server_tokens off;

منع تنفيذ eval

المشكلة:

يمكن للمخترقين حقن كود ضار. إذا خدعوا تطبيقك لتشغيل eval() يمكنهم سرقة البيانات أو السيطرة.

الحل:

✅ استخدم Helmet مع CSP لمنع eval() في الواجهة

app.use(
  helmet({
    contentSecurityPolicy: {
      directives: {
        defaultSrc: ["'self'"],
        scriptSrc: ["'self'"],
        styleSrc: ["'self'", "'unsafe-inline'"],
      },
    },
  })
);

✅ شغّل Node.js بعلم --no-eval

node --no-eval server.js

حقن SQL وNoSQL

المشكلة:

يمكن للمهاجمين حقن استعلامات ضارة عبر حقول إدخال غير منظّفة للقراءة أو التعديل أو الحذف.

الحل:

✅ استخدم مكتبات ORM/ODM مثل Sequelize وMongoose
✅ استخدم استعلامات ذات معاملات بدل دمج النصوص
✅ نظّف إدخال المستخدم قبل المعالجة

// آمن
const user = await db.query("SELECT * FROM users WHERE id = ?", [req.params.id]);

البرمجة النصية عبر المواقع (XSS)

المشكلة:

يحقن المهاجمون سكربتات ضارة في الصفحات تُنفَّذ في متصفح المستخدم.

الحل:

✅ اهرب المحتوى المولَّد من المستخدم قبل العرض
✅ استخدم رؤوس أمان (CSP، X-XSS-Protection)
✅ استخدم مكتبات مثل DOMPurify لتنظيف HTML


تزوير الطلبات عبر المواقع (CSRF)

المشكلة:

يخدع المهاجم المستخدمين لإجراء طلبات غير مقصودة دون علمهم.

الحل:

✅ استخدم رموز CSRF
✅ استخدم كوكيز SameSite
✅ أكّد الإجراءات الحساسة بإعادة المصادقة


المصادقة واختطاف الجلسة

المشكلة:

آليات مصادقة ضعيفة تسمح بسرقة جلسات المستخدمين.

الحل:

✅ استخدم تجزئة كلمات مرور قوية (bcrypt، Argon2)
✅ فرض المصادقة متعددة العوامل
✅ كوكيز جلسة آمنة (HttpOnly، Secure، SameSite)
✅ تحديد المعدل لمنع هجمات القوة الغاشمة


تفويض معطوب

المشكلة:

يمكن للمستخدمين الوصول لموارد غير مصرح بها بسبب فحوصات صلاحيات غير صحيحة.

الحل:

✅ استخدم التحكم بالوصول القائم على الأدوار (RBAC)
✅ فرض قواعد تفويض API صارمة
✅ لا تثق بـ req.body أو req.user.role دون تحقق


إعدادات أمان خاطئة

المشكلة:

تعريض بيانات اعتماد افتراضية أو تتبعات مكدس أو خدمات غير ضرورية أو تبعيات قديمة.

الحل:

✅ عطّل تتبعات المكدس في الإنتاج
✅ استخدم متغيرات البيئة بدل الأسرار المثبتة
✅ حدّث التبعيات (npm audit fix)
✅ استخدم helmet لرؤوس HTTP الآمنة


رفض الخدمة (DoS) وتحديد المعدل

المشكلة:

يرسل المهاجمون طلبات ضخمة لاستنزاف موارد الخادم.

الحل:

✅ استخدم تحديد المعدل (express-rate-limit أو Throttler في NestJS)
✅ تحقق من الطلبات لمنع الحمولات الكبيرة
✅ موازنة الحمل والتخزين المؤقت

app.use(express.json({ limit: '300kb' }));

تجنب التعبيرات النمطية الخطرة

التعبيرات النمطية مفيدة لكن قد تستهلك معالجاً مفرطاً. استخدم مكتبات تحقق مثل validator.js، وإذا استخدمت regex تحقق بـ safe-regex.

أضف الرؤوس الضرورية لمزيد من الأمان

Strict-Transport-Security (HSTS)

يجبر المتصفح على HTTPS فقط.

X-Content-Type-Options

يمنع المتصفحات من تخمين نوع MIME.

X-Frame-Options

يمنع هجمات clickjacking.

Referrer-Policy

يتحكم في معلومات المرجع المشتركة.

Permissions-Policy

يقيّد الوصول للكاميرا والميكروفون والموقع.

الخلاصة

شكراً لقراءة المقال! لا يمكن جعل أي شيء آمناً 100% على الإنترنت، لكن يمكننا جعل تطبيقاتنا أكثر أماناً. استخدام هذه الإعدادات يقلل المخاطر ويحسّن الأمان. أعتقد أن كل مطور يجب أن يضبط هذا عند إعداد المشروع.

Related Blogs

Related Blogs

هل ما زلت تستخدم Bcrypt في 2026؟ إليك لماذا (ومتى) تتحول إلى Argon2
الأمن السيبراني
August 21, 2026

هل ما زلت تستخدم Bcrypt في 2026؟ إليك لماذا (ومتى) تتحول إلى Argon2

إذا كان تطبيقك يخزّن كلمات المرور، فإن هذا القرار أهم من أي شيء آخر تقريبًا في قاعدة شيفرتك البرمجية. إن أصبْتَ فيه، فاختراق قاعدة البيانات سيكون مجرد إزعاج. وإن أخطأْتَ، فستكون كارثة على الصفحة الأولى للصحف.

لقد أنشأنا NestJs DuckDB: تكامل بسيط لـ DuckDB مع NestJS
برمجة
July 23, 2026

لقد أنشأنا NestJs DuckDB: تكامل بسيط لـ DuckDB مع NestJS

كمطورين، نستخدم غالبًا قواعد بيانات مثل PostgreSQL أو MySQL أو MongoDB عند بناء تطبيقات الواجهة الخلفية باستخدام NestJS. ولكن ليست كل مشكلة بيانات تتطلب إعداد قاعدة بيانات تقليدية.

مخاطر SVG الخفية: لماذا يمكن لصيغة الصور «الآمنة» أن تخترق موقعك
الأمن السيبراني
June 19, 2026

مخاطر SVG الخفية: لماذا يمكن لصيغة الصور «الآمنة» أن تخترق موقعك