اگر به تازگی توسعه وب یا سفر Node.js خود را آغاز کرده اید، ممکن است از اهمیت امنیت برنامه خود بی اطلاع باشید.
Express.js یک راه حل کارآمد برای ساختن برنامه های وب باطن ارائه می دهد، اما از نظر امنیت کوتاهی می کند. هنگامی که در حال ساخت یک برنامه وب هستید، به اقدامات امنیتی کافی برای محافظت از داده های کاربران خود نیاز دارید.
خوشبختانه، روش هایی وجود دارد که می توانید برای افزایش امنیت برنامه های Express.js خود استفاده کنید. همه این نکات به تقویت امنیت برنامه های شما با استفاده از رویکردهای مختلف کمک می کند.
یک برنامه Express.js راه اندازی کنید
با راه اندازی یک وب سرور نسخه ی نمایشی Express.js با استفاده از npm، Node Package Manager شروع کنید. یک پوشه پروژه به صورت محلی ایجاد کنید و دایرکتوری را در ترمینال خود به آن تغییر دهید.
mkdir express-project
cd express-project
سپس یک فایل package.json در دایرکتوری ریشه ایجاد کنید.
npm init -y
ادامه دهید و Express.js را نصب کنید.
npm install express
در نهایت، یک فایل server.js در پوشه اصلی پوشه پروژه خود ایجاد کنید و کد زیر را برای راه اندازی یک وب سرور اصلی اضافه کنید.
const express = require("express")
const app = express()
const PORT = process.env.PORT || 5000
app.get("/", (req, res) => {
res.json("Hello, World!")
})
app.listen(PORT, () => {
console.log(`Starting server on http://localhost:${PORT}`)
})
سرور را با این دستور راه اندازی کنید:
node server.js
اکنون آماده کاوش در برخی از اقداماتی هستید که می توانید برای ایمن سازی برنامه Express.js خود استفاده کنید.
1. ایمن سازی برنامه های Express.js با استفاده از کلاه ایمنی
Helmet یک میان افزار Node.js است که با تنظیم هدرهای امنیتی HTTP مختلف به ایمن کردن برنامه های سمت سرور کمک می کند. این هدرها مکانیسمهای دفاعی ضروری را در برابر آسیبپذیریهای امنیتی پشتیبان رایج، مانند اسکریپت بین سایتی (XSS)، جعل درخواست بین سایتی (CSRF) و بسیاری دیگر ارائه میکنند.
Express.js به طور پیشفرض سرصفحههای امنیتی HTTP را پیکربندی نمیکند و یک نقص امنیتی بالقوه باقی میگذارد که هدرهای بالقوه حساس را آشکار میکند. با استفاده از این اطلاعات، عوامل مخرب ممکن است بتوانند دسترسی غیرمجاز به دست آورند یا برنامه شما را مختل کنند.
کلاه ایمنی به عنوان یک سپر حیاتی عمل می کند و تضمین می کند که پاسخ های HTTP برنامه اقدامات امنیتی لازم را اتخاذ کرده و سطح حمله احتمالی را به میزان قابل توجهی کاهش می دهد.
بررسی امنیت برنامههای Express.js بدون کلاه ایمنی
با اجرای سرور، هدرهای برنامه را بررسی کنید. ادامه دهید و با استفاده از Postman یا هر کلاینت دیگری که سرصفحههای پاسخ را نشان میدهد، درخواستهای HTTP را به API ارسال کنید. اکثر مرورگرها شامل مجموعه ای از ابزارهای توسعه دهنده هستند که به شما این امکان را می دهند.
هنگامی که درخواستهایی را به نقطه پایانی خانه ارسال میکنید، باید نتایج مشابهی را در بخش سرصفحههای پاسخ در Postman مشاهده کنید.
به هدر X-Powered-By توجه کنید. به طور معمول، فناوریهای بکاند از این هدر برای نشان دادن چارچوب یا نرمافزار دیگری که برنامه وب را قدرت میدهد، استفاده میکنند. معمولاً باید هدر X-Powered-By را در محیط تولید حذف کنید.
با انجام این کار، از دستیابی مهاجمان بالقوه به اطلاعات ارزشمندی که می توانند برای سوء استفاده از آسیب پذیری های شناخته شده مرتبط با پشته فناوری شما استفاده کنند، جلوگیری می کنید.
پیکربندی امنیتی سرور Express.js را آزمایش کنید
برای ارزیابی وضعیت امنیتی برنامه های شما، از ابزار آنلاین Security Headers استفاده می کنیم. این برنامه به طور خاص برای ارزیابی پیکربندی امنیتی هدرهای HTTP برای برنامه های سمت سرویس گیرنده و همچنین برنامه های سمت سرور طراحی شده است.
ابتدا باید سرور Express.js محلی خود را از طریق اینترنت در دسترس قرار دهید. دو روش ممکن برای دستیابی به این هدف وجود دارد: استقرار برنامه Express.js خود در یک سرور ابری یا استفاده از ngrok.
برای استفاده از آن، فایل فشرده ngrok را دانلود کنید، فایل اجرایی را استخراج کنید و برنامه را اجرا کنید. سپس، دستور زیر را برای میزبانی سرور محلی Express.js خود با ngrok اجرا کنید.
ngrok http 5000
ngrok اطلاعات مختصری را به شکل زیر خروجی می دهد:
URL فوروارد ارائه شده را کپی کرده و در کادر ورودی Security Headers قرار دهید و روی دکمه Scan کلیک کنید.
پس از تکمیل ارزیابی امنیتی، باید گزارش مشابهی دریافت کنید.
بر اساس گزارش، مشخص است که سرور Express.js درجه F ضعیفی دریافت کرده است. این درجه پایین نتیجه عدم وجود هدرهای امنیتی HTTP ضروری در پیکربندی سرور است – عدم وجود آنها سرور را در برابر خطرات امنیتی بالقوه آسیب پذیر می کند.
Helmet را در برنامه Express.js ادغام کنید
اکنون، پیش بروید و Helmet را در برنامه Express.js خود ادغام کنید. دستور زیر را برای نصب وابستگی اجرا کنید.
npm install helmet
فایل server.js خود را به روز کنید و Helmet را وارد کنید.
const helmet = require("helmet")
اکنون، Helmet را به برنامه Express.js خود اضافه کنید.
app.use(helmet())
در نهایت، سرور توسعه را بچرخانید، پیوند ارسال را از ترمینال ngrok کپی کنید و آن را در قسمت ورودی Security Header قرار دهید تا سرور محلی را دوباره اسکن کنید. هنگامی که اسکن مجدد کامل شد، باید نتایج مشابه موارد زیر را مشاهده کنید:
پس از ادغام Helmet، Express.js شامل چندین هدر امنیتی ضروری در پاسخ HTTP است. این پیشرفت قابل توجه باعث شد که برنامه Express.js به درجه A منتقل شود.
در حالی که Helmet یک راه حل بی عیب نیست، اما به طور قابل توجهی امنیت کلی برنامه Express.js شما را افزایش می دهد.
2. ایمن سازی برنامه های Express.js با استفاده از Joi، یک کتابخانه اعتبارسنجی ورودی
Joi یک کتابخانه اعتبارسنجی ورودی است که با ارائه روشی مناسب برای اعتبارسنجی و پاکسازی ورودی کاربر، به ایمن کردن برنامههای Express.js کمک میکند. با تعریف طرحوارههای اعتبارسنجی با استفاده از Joi، میتوانید ساختار مورد انتظار، انواع دادهها و محدودیتهای دادههای ورودی را مشخص کنید.
Joi ورودی را در مقابل طرح واره تعریف شده اعتبارسنجی می کند و اطمینان حاصل می کند که معیارهای مشخص شده را برآورده می کند. این به جلوگیری از آسیبپذیریهای امنیتی رایج مانند تزریق داده، اسکریپت بین سایتی (XSS) و سایر حملات دستکاری دادهها کمک میکند.
این مراحل را برای ادغام Joi در برنامه خود دنبال کنید.
- Joi را نصب کنید. npm joi را نصب کنید
- Joi را در فایل server.js خود وارد کنید. const Joi = require(‘joi’);
- یک طرح اعتبارسنجی داده Joi ایجاد کنید که ساختار مورد انتظار و هرگونه محدودیت برای داده های ورودی را تعریف می کند. const schema = Joi.object({ email: Joi.string().email().required()، password: Joi.string().min(5).max(16).required()});
- تمام داده های دریافتی را با استفاده از طرحواره تعریف شده اعتبار سنجی کنید. const { error, value } = schema.validate(req.body);if (خطا) { // Handle validation error // برای مثال، یک پاسخ خطا را برگردانید return res.status(400).json({ error: error. جزئیات[0].message });}
npm install joi
const Joi = require('joi');
const schema = Joi.object({
email: Joi.string().email().required(),
password: Joi.string().min(5).max(16).required()
});
const { error, value } = schema.validate(req.body);
if (error) {
// Handle validation error
// For example, return an error response
return res.status(400).json({ error: error.details[0].message });
}
با اجرای این مراحل، می توانید از قابلیت های اعتبارسنجی ورودی Joi برای ایمن سازی برنامه های Express.js خود استفاده کنید. این اطمینان حاصل می کند که داده های دریافتی با محدودیت های تعریف شده مطابقت دارند و از تهدیدات امنیتی بالقوه دستکاری داده ها جلوگیری می کند.
3. ایمن سازی برنامه های Express.js با استفاده از مکانیسم CORS
به اشتراک گذاری منابع متقاطع (CORS) مکانیزمی است که وب سرورها برای مدیریت مبداها (کلاینت ها یا سایر برنامه های سمت سرور) می توانند به منابع محافظت شده خود دسترسی داشته باشند، استفاده می کنند. این مکانیسم به محافظت در برابر درخواستهای غیرمجاز متقاطع کمک میکند و از مسائلی مانند حملات اسکریپت بین سایتی (XSS) جلوگیری میکند.
برای ایمن سازی برنامه های Express.js با استفاده از CORS، این مراحل را دنبال کنید:
- بسته CORS را نصب کنید. npm cors را نصب کنید
- نیاز و استفاده از میان افزار CORS در فایل server.js. const cors = require(‘cors’);app.use(cors());
npm install cors
const cors = require('cors');
app.use(cors());
با ادغام میان افزار CORS در برنامه Express.js خود، اشتراک منابع Cross-Origin را فعال می کنید. این تضمین می کند که خطرات امنیتی بالقوه مربوط به درخواست های متقاطع را کاهش می دهید.
ایمن سازی برنامه های سمت سرور با سهولت
میتوانید از یک یا چند مورد از این اقدامات ضروری برای افزایش امنیت برنامههای Express.js خود استفاده کنید.
در حالی که اقدامات و رویکردهای زیادی برای محافظت از برنامههای سمت سرور شما وجود دارد، نکته کلیدی این است که باید امنیت را در طول چرخه عمر توسعه در اولویت قرار دهید. این وظیفه ای است که از مرحله طراحی شروع می شود و باید تا راه استقرار ادامه یابد.