تحديد معدل الطلبات والأمان والأداء
تحديد معدل الطلبات والأمان والأداء
يجب على تطبيق NestJS الإنتاجي أن يحمي نفسه من الإساءة، ويكشف ترويسات HTTP الأمنية الصحيحة، ويكون مضبوطًا لتحقيق أعلى إنتاجية. يتناول هذا الدرس أربعة محاور متكاملة: تحديد معدل الطلبات عبر @nestjs/throttler، وترويسات أمان HTTP باستخدام Helmet، وإعداد CORS، وضبط الأداء — بما يشمل محوّل Fastify وضغط الاستجابات وحدود حجم الحمولة.
تحديد معدل الطلبات مع @nestjs/throttler
تحجب وحدة throttler العملاء الذين يرسلون طلبات كثيرة جدًا في نافذة زمنية معيّنة، مما يحمي واجهتك البرمجية من هجمات القوة الغاشمة والاستهلاك الجامح.
سجّل الوحدة بشكل عام وطبّق الحارس:
تجاوَز الإعداد لكل مسار بمزيّن @Throttle()، أو استثنِ المسارات الداخلية بـ @SkipThrottle():
ThrottlerStorageRedisService من @nestjs/throttler-storage-redis) حتى تتشارك جميع النسخ العدّادات نفسها.
ترويسات أمان HTTP مع Helmet
تضبط Helmet مجموعة من ترويسات استجابة HTTP المعروفة التي تصلّب تطبيقك في مواجهة الهجمات الشائعة المستندة إلى المتصفح (XSS والنقر التدريجي وتخمين MIME وغيرها).
Content-Security-Policy الافتراضية لـ helmet() السكريبتات المدمجة أو موارد CDN الخارجية. مرّر كائن خيارات إلى helmet({ contentSecurityPolicy: { directives: { ... } } }) لتخصيصها، أو عطّل قاعدة CSP وحدها مع الإبقاء على البقية.
إعداد CORS
يجب تمكين CORS حتى تتمكّن عملاء المتصفح من استدعاء واجهتك البرمجية من أصل مختلف. يُغلّف NestJS حزمة cors:
origin: '*' مع credentials: true أبدًا. ترفض المتصفحات هذه التوليفة. حدّد أصولًا بعينها، أو استخدم دالّة تحقّق ديناميكية تفحص قائمة السماح وتُعيد الأصل أو false.
الأداء: محوّل Fastify
يعتمد NestJS على Express افتراضيًا. يُضاعف استبدال Fastify الإنتاجية الخام عادةً لأن Fastify يمتلك محلّل HTTP أسرع ومحرك توجيه أكثر كفاءة.
app.use(someExpressMiddleware)) لا يعمل مع Fastify. راجع قائمة وسيطك قبل التبديل.
الضغط وحدود الحمولة
يُقلّص تمكين ضغط gzip أحجام الاستجابات بشكل ملحوظ في واجهات JSON كثيفة. استخدم حزمة compression (Express) أو الإضافة المدمجة لـ Fastify:
حدّد حجم جسم الطلب الوارد لمنع هجمات استنزاف الذاكرة. مع Express، اضبطه عند تسجيل محلّلي الجسم:
الخلاصة
تجمع تطبيقات NestJS الآمنة عالية الأداء بين @nestjs/throttler لتحديد معدل الطلبات (حارس عام + تجاوزات لكل مسار)، وHelmet لترويسات الأمان، وCORS المُعدّ بقائمة أصول صريحة وcredentials: true عند الحاجة فقط، والمحوّل الاختياري Fastify لرفع الإنتاجية، والضغط لتقليص الاستجابات، وحدود حجم الجسم لمنع الإساءة. هذه ليست إضافات اختيارية — بل هي متطلبات أساسية لأي خدمة متاحة على الإنترنت.