NestJS / المتقدم: العمر وأدلة العمل الموزع / الدرس 16
أمن HTTP والرفع وعقود المنصة
راجع ثقة النقل وسياسة المتصفح واستقبال الملف المحدود دون افتراض أن المزخرف يجعل المنصة محمولة.
في هذه الصفحة
أهداف الدرس
- افصل CORS وCSRF والمصادقة وسياسة الكائن.
- حدد حدود الرفع والتخزين الخاص والتنظيف لإصدار الموائم المختار.
عامل بيانات الإحالة وقواعد المتصفح كحدين منفصلين
يحتاج الموائم خلف وكيل سياسة متحققاً منها للبروتوكول والمضيف والعنوان المحال. لا يوثق Nest الترويسات العشوائية. تضبط CORS قراءة المتصفح ولا تصادق أو تمنع كل تغيير مزور. تحتاج سلطة الملف سياسة CSRF وسمات تناسب الموقع والأصل. أبق GET آمنة واستعمل أصلاً موثوقاً للروابط الحساسة. قد يخفي الضبط خطأ متصفح ويضعف التفويض أو يسرب مخبأ هوية لأخرى. افصل الأدلة حتى لا تعالج فقد ملف آمن بالسماح لكل أصل أو الثقة بكل ادعاء نقل وارد من المستدعي.
سم مراحل الاستقبال قبل خيارات المعترض
يفصل السجل الاستقبال المحدود والتخزين الخاص والمراجعة والنشر المفوض، وليس إعداداً مشغلاً. يقدم المستدعي الاسم وMIME فلا يثبتان سلامة الملف. اختر استيرادات وحزم الموائم للإصدار؛ يتضمن التوثيق دعماً أحدث لـFastify multipart فلا تنقل حكماً قديماً بعدم الدعم دون فحص النسخة. تحقق من البايتات والأجزاء والمساحة وتنظيف رفض المحلل أو pipe. لا يشغل المثال رفعاً أو ملفاً. ينبغي أن يحدد العقد أيضاً مالك الملف الجزئي إذا توقف الطلب قبل المعالج، لأن غياب استدعاء المتحكم لا يعني عدم كتابة تخزين مؤقت.
{"intake":"synthetic-only","limits":["bytes","parts","temporary-space"],"storage":"private-quarantine","storageIdentity":"server-controlled","publication":"after-domain-approval","adapterPackages":"verify-exact-release"}
لا ينشئ السجل وسيطاً أو تخزيناً وتحتاج الحدود والتنظيف تحقق الموائم الفعلي.
وضح ترميز الإخراج والجلب الخارجي
لا تجعل DTO المتسلسلة النص آمناً في كل HTML أو شيفرة أو URL. اتبع عقد الترميز وتجنب الإدراج الخام التنفيذي. ويعرض جلب URL سلطة شبكة الخادم دون ضبط الوجهة والبروتوكول والتحويل والبايت والموعد؛ فضل قدرة محددة على جالب عام. لا يعقم الحارس SQL أو مساراً أو ترويسة تلقائياً؛ لكل وجهة قواعد ربط وتحقق. راجع الحدود دون مسح أو فحص شبكة خاصة أثناء التأليف. نجاح whitelist على حقل عنوان لا يعني أن استخدامه لاحقاً في تحويل أو اسم ملف أو استعلام صار مناسباً لذلك السياق.
اختبر فئات الاستقبال المعلنة دون ادعاء فحص المحتوى
يقبل الشرط فئة استيراد وعدداً محدوداً، ولا يفحص البايت أو يحيد محتوى نشطاً أو يثبت توقيعاً أو يفوض النشر. صرح بالحدود حتى لا تصبح بيانات وصفية شهادة أمن. يحل العامل مفتاحاً يتحكم به الخادم ويتحقق من النطاق قبل الاستعمال. قد يكون الاسم الأصلي للعرض ولا يختار مساراً مباشرة. اختبر الجزئي ومنع النشر بعينات معزولة مأذونة. تثبت الدالة عددين وفئة فقط، ويبقى تحديد الملف الذي تنطبق عليه تلك المعلومات والتحقق من تطابقها مع محتواه مسؤولية أخرى في سير الاستقبال.
function acceptable(category,rows) {
return category === "course-labels" && Number.isInteger(rows) && rows >= 1 && rows <= 100;
}
console.assert(acceptable("course-labels",100));
console.assert(!acceptable("private-accounts",1));
console.assert(!acceptable("course-labels",101));
تنجح الفئة والعدد المسموحان فقط دون فحص بايت أو موائم أو تخزين.
راجع الاعتمادات وإفصاح الأخطاء باستمرار
ثبت إصدارات مصانة وراجع التنبيهات بإجراء المشروع. طبق ترويسات وحدوداً وخطأ آمناً ولا تقدم حزمة كحماية كاملة. تسبق الحدود التخزين غير المحدود ويحرر الرفض الملف والتدفق المملوكين. افحص تغيير الموائم بعينات الملف وCORS والرفع والرد. يحلل المقرر السياسة ويشغل الشرط فقط دون متصفح أو وكيل أو محلل أو وجهة أو قاعدة أو مسح. يحفظ التقرير القيود ولا يدعي تقييماً أمنياً إنتاجياً. تكمن قيمة العينة في وضوح حد صغير قابل للمراجعة لا في تحويله إلى ضمان لمئات المسارات غير المختبرة.
الأخطاء الشائعة وإصلاحها
يختار اسم ملف تخزيناً خاصاً للكتابة فوقه
- لماذا يحدث؟
- عوملت بيانات يختارها المستدعي كسلطة لتحديد مسار نظام الملفات.
- كيف تصلحه؟
- استخدم مفاتيح تخزين يتحكم بها الخادم وسياسة نشر صريحة.
- كيف تتجنب تكراره؟
- اختبر أسماء شبيهة بالمسارات دون قراءة ملفات عشوائية.
تعامل موافقة CORS كمصادقة مستخدم
- لماذا يحدث؟
- اختلطت سياسة قراءة المتصفح بهوية المستخدم المصادق عليها.
- كيف تصلحه؟
- صادق المستدعي وفوضه وفق بروتوكول المجال.
- كيف تتجنب تكراره؟
- اختبر استدعاءات عميل غير متصفح والوصول إلى كائن ممنوع.
يفشل موائم الرفع بعد تغيير النسخة
- لماذا يحدث؟
- نسخت افتراضات منصة وحزمة قديمتين دون مراجعة إصدار التكامل.
- كيف تصلحه؟
- استخدم استيرادات الإصدار المحدد وخيارات الموائم المدعومة فيه.
- كيف تتجنب تكراره؟
- احتفظ بعينات رفض الرفع وتنظيفه عبر الترقيات.
اختبر فهمك
1. هل يثبت قبول نوع MIME أن محتوى الملف المرفوع آمن؟
اعرض الحل المشروح
لا. قد يكون النوع المعلن كاذباً، وحتى الصيغة المحددة بصورة صحيحة قد تحمل محتوى لا يناسب المجال أو سياق الإخراج. طبق فحصاً محدود الموارد ونشراً مفوضاً كلّاً على حدة. لا يفحص شرط البيانات الوصفية المحلي أي ملف أصلاً، ولذلك لا يستطيع التصديق على تلك الضوابط.
2. لماذا يجب التحقق من دعم موائم الرفع بالإصدار الدقيق؟
اعرض الحل المشروح
تضيف الأطر قدرات وتغير طريقة تكامل الحزم بمرور الوقت. قد يصبح لمسار رفع لم يكن مدعوماً سابقاً واجهة رسمية خاصة بموائمه، بينما يظل استيراد معترض المنصة الأخرى خطأ. استخدم التوثيق الأولي الحالي والاختبارات المحفوظة بدلاً من حكم عام غير مؤرخ على دعم كل الإصدارات.
أهم ما تعلمته
- تحتاج سلطة النقل والمحتوى والمجال ضوابط مستقلة.
- دعم المنصة والتنظيف عقدان بإصدار دقيق.