إذا كنت قد بدأت للتو في تطوير الويب أو رحلة Node.js ، فقد لا تكون على دراية بمدى أهمية تأمين تطبيقك.
يوفر Express.js حلاً فعالاً لإنشاء تطبيقات الويب الخلفية ، لكنه يفتقر إلى الأمان. عند إنشاء تطبيق ويب ، فإنك تحتاج إلى إجراءات أمنية مناسبة لحماية بيانات المستخدمين.
لحسن الحظ ، هناك طرق يمكنك اتباعها لتحسين أمان تطبيقات Express.js. ستساعد هذه النصائح جميعًا في تعزيز أمان تطبيقاتك باستخدام أساليب مختلفة.
قم بإعداد تطبيق Express.js
ابدأ بإعداد عرض توضيحي خادم الويب Express.js استخدام npm ، مدير حزمة العقدة. قم بإنشاء مجلد مشروع محليًا وقم بتغيير الدليل إليه على الجهاز الطرفي.
مشروع مكدير السريع
سي دي اكسبرس بروجيكت
بعد ذلك ، قم بإنشاء ملف package.json ملف في الدليل الجذر.
npm الحرف الأول
انطلق وقم بتثبيت Express.js.
npm التثبيت السريع
أخيرًا ، قم بإنشاء ملف server.js ملف في الدليل الجذر لمجلد مشروعك ، وأضف الكود التالي لإعداد خادم ويب أساسي.
مقدار ثابت صريح = يتطلب("يعبر")
مقدار ثابت التطبيق = صريح ()
مقدار ثابت المنفذ = process.env. بورت || 5000app.get ("/"، (مطلوب ، الدقة) => {
res.json ("مرحبا بالعالم!")
})
app.listen (PORT، () => {
وحدة التحكم.سجل("بدء تشغيل الخادم http://localhost:{PORT} دولار`)
})
ابدأ الخادم بهذا الأمر:
العقدة server.js
أنت الآن جاهز لاستكشاف بعض الإجراءات التي يمكنك استخدامها لتأمين تطبيق Express.js.
1. تأمين تطبيقات Express.js باستخدام الخوذة
خوذة هو برنامج وسيط Node.js يساعد على تأمين التطبيقات من جانب الخادم من خلال تعيين رؤوس أمان HTTP متنوعة. توفر هذه الرؤوس آليات دفاع أساسية ضد الثغرات الأمنية الخلفية الشائعة، مثل البرمجة النصية عبر المواقع (XSS) وتزوير الطلبات عبر المواقع (CSRF) وغير ذلك الكثير.
لا يقوم Express.js بتكوين رؤوس أمان HTTP افتراضيًا ، مما يترك ثغرة أمنية محتملة تكشف عن الرؤوس الحساسة المحتملة. باستخدام هذه المعلومات ، قد تتمكن الجهات الخبيثة من الوصول غير المصرح به أو تعطيل تطبيقك بطريقة أخرى.
تعمل الخوذة كدرع حيوي ، مما يضمن اعتماد استجابات HTTP للتطبيق تدابير أمنية ضرورية ، مما يقلل بشكل كبير من سطح الهجوم المحتمل.
استكشاف أمان تطبيقات Express.js بدون خوذة
أثناء تشغيل الخادم ، افحص رؤوس التطبيق. انطلق و تقديم طلبات HTTP إلى API باستخدام Postman أو أي عميل آخر يعرض رؤوس الاستجابة. تتضمن معظم المتصفحات مجموعة من أدوات المطورين التي تتيح لك القيام بذلك.
عند إرسال طلبات إلى نقطة نهاية الصفحة الرئيسية ، يجب أن تلاحظ نتائج مماثلة في الرؤوس قسم من الرد داخل ساعي البريد.
لاحظ ال X-Powered-By رأس. عادةً ما تستخدم تقنيات الواجهة الخلفية هذا العنوان للإشارة إلى إطار العمل أو البرامج الأخرى التي تشغل تطبيق الويب. يجب عليك عادة إزالة X-Powered-By رأس في بيئة الإنتاج.
من خلال القيام بذلك ، ستمنع المهاجمين المحتملين من الحصول على معلومات قيمة يمكنهم استخدامها لاستغلال الثغرات الأمنية المعروفة المرتبطة بمكدس التكنولوجيا لديك.
اختبر تكوين الأمان لخادم Express.js
لتقييم حالة أمان تطبيقاتك ، سنستخدم ملف رؤوس الأمان أداة على الإنترنت. تم تصميم هذا التطبيق خصيصًا لتقييم تكوين الأمان لرؤوس HTTP من جانب العميل ، بالإضافة إلى التطبيقات من جانب الخادم.
أولاً ، تحتاج إلى إتاحة الوصول إلى خادم Express.js المحلي عبر الإنترنت. هناك طريقتان محتملتان لتحقيق ذلك: نشر تطبيق Express.js على خادم سحابي أو استخدام ngrok.
لتستخدمها، تنزيل ngrok zip واستخرج الملف القابل للتنفيذ وابدأ تشغيل التطبيق. بعد ذلك ، قم بتشغيل الأمر التالي لاستضافة خادم Express.js المحلي الخاص بك مع ngrok.
ngrok http 5000
سيخرج ngrok بعض المعلومات الموجزة التي تبدو كالتالي:
انسخ ملف عنوان URL لإعادة التوجيه ولصقه في ملف رؤوس الأمانمربع الإدخال ، وانقر فوق مسح زر.
بمجرد اكتمال التقييم الأمني ، يجب أن تتلقى تقريرًا مشابهًا.
بناءً على التقرير ، من الواضح أن خادم Express.js تلقى ملف F درجة. هذه الدرجة المنخفضة هي نتيجة لغياب رؤوس أمان HTTP الأساسية في تكوين الخادم - وغيابها يترك الخادم عرضة لمخاطر أمنية محتملة.
دمج الخوذة في تطبيق Express.js
الآن ، انطلق ودمج Helmet في تطبيق Express.js الخاص بك. قم بتشغيل الأمر أدناه لتثبيت التبعية.
npm تثبيت خوذة
قم بتحديث ملف server.js واستورد Helmet.
مقدار ثابت خوذة = يتطلب("خوذة")
الآن ، أضف Helmet إلى تطبيق Express.js الخاص بك.
app.use (خوذة ())
أخيرًا ، قم بتدوير خادم التطوير ، وانسخ رابط إعادة التوجيه من نجروك الطرفية ، والصقه في ملف رأس الأمان حقل الإدخال لإعادة فحص الخادم المحلي. بمجرد اكتمال إعادة الفحص ، من المفترض أن ترى نتائج مماثلة لما يلي:
بعد دمج Helmet ، يتضمن Express.js العديد من رؤوس الأمان الأساسية في استجابة HTTP. تسبب هذا التحسين الكبير في انتقال تطبيق Express.js إلى ملف أ درجة.
على الرغم من أن Helmet ليس حلاً مضمونًا ، إلا أنه يعزز بشكل كبير الأمان العام لتطبيق Express.js الخاص بك.
2. تأمين تطبيقات Express.js باستخدام Joi ، مكتبة التحقق من صحة الإدخال
جوي هي مكتبة للتحقق من صحة الإدخال تساعد على تأمين تطبيقات Express.js من خلال توفير طريقة ملائمة للتحقق من صحة إدخال المستخدم وتعقيمه. من خلال تحديد مخططات التحقق من الصحة باستخدام Joi ، يمكنك تحديد البنية وأنواع البيانات والقيود المتوقعة للبيانات الواردة.
يتحقق Joi من صحة الإدخال مقابل المخطط المحدد ، مما يضمن أنه يفي بالمعايير المحددة. يساعد هذا في منع الثغرات الأمنية الشائعة مثل إدخال البيانات والبرمجة النصية عبر المواقع (XSS) وهجمات التلاعب بالبيانات الأخرى.
اتبع هذه الخطوات لدمج Joi في تطبيقك.
- قم بتثبيت Joi.
npm تثبيت جوي
- قم باستيراد Joi في ملف server.js الخاص بك.
مقدار ثابت جوي = يتطلب("جوي");
- قم بإنشاء مخطط التحقق من صحة بيانات Joi الذي يحدد البنية المتوقعة وأي قيود لبيانات الإدخال.
مقدار ثابت المخطط = Joi.object ({
البريد الإلكتروني: Joi.string (). email (). required ()،
كلمة المرور: Joi.string (). min (5).الأعلى(16).مطلوب()
}); - تحقق من صحة جميع البيانات الواردة باستخدام المخطط المحدد.
مقدار ثابت {error، value} = schema.validate (req.body)؛
لو (خطأ) {
// معالجة خطأ التحقق من الصحة
// على سبيل المثال ، قم بإرجاع استجابة خطأ
يعود res.status (400) .json ({ خطأ: تفاصيل الخطأ[0].رسالة })؛
}
من خلال تنفيذ هذه الخطوات ، يمكنك الاستفادة من إمكانات التحقق من صحة الإدخال في Joi لتأمين تطبيقات Express.js الخاصة بك. سيضمن ذلك تلبية البيانات الواردة للقيود المحددة ، مما يمنع التهديدات الأمنية المحتملة للتلاعب بالبيانات.
3. تأمين تطبيقات Express.js باستخدام آلية CORS
تعد مشاركة الموارد عبر المنشأ (CORS) آلية تستخدمها خوادم الويب لإدارة الأصول - العملاء أو التطبيقات الأخرى من جانب الخادم - التي يمكنها الوصول إلى مواردها المحمية. تساعد هذه الآلية في الحماية من الطلبات المشتركة المصدر غير المصرح بها ، مما يمنع حدوث مشكلات مثل هجمات البرمجة النصية عبر المواقع (XSS).
لتأمين تطبيقات Express.js باستخدام CORS ، اتبع الخطوات التالية:
- قم بتثبيت حزمة CORS.
npm تثبيت كور
- طلب واستخدام البرامج الوسيطة CORS في ملف server.js.
مقدار ثابت كور = يتطلب("كورس");
app.use (cors ()) ؛
من خلال دمج برمجية CORS الوسيطة في تطبيق Express.js الخاص بك ، يمكنك تمكين مشاركة الموارد عبر الأصل. هذا يضمن لك التخفيف من مخاطر الأمان المحتملة المتعلقة بالطلبات عبر الأصل.
تأمين التطبيقات من جانب الخادم بسهولة
يمكنك استخدام واحد أو أكثر من هذه الإجراءات الأساسية لتحسين أمان تطبيقات Express.js.
في حين أن هناك العديد من الإجراءات والأساليب المتاحة لحماية التطبيقات من جانب الخادم ، فإن الفكرة الأساسية هي أنه يجب عليك إعطاء الأولوية للأمان طوال دورة حياة التطوير بأكملها. هذه مهمة تبدأ في مرحلة التصميم ويجب أن تستمر طوال الطريق حتى النشر.