مقدمه
امنیت API به معنای حفاظت از یکپارچگی APIهایی است که ما استفاده یا ایجاد میکنیم. امروزه بیشتر شرکتها از API برای اتصال خدمات و انتقال داده استفاده میکنند. اگر API دچار مشکل، افشا یا هک شود، منجر به نقض دادهها خواهد شد. بنابراین، بر اساس اطلاعات انتقالیافته، باید سطح امنیت API مورد نیاز برای پیادهسازی در برنامه را در نظر بگیریم. در این مقاله، چند پکیج مفید npm را که به ما کمک میکنند تا از مشکلات امنیتی رایج اجتناب کنیم، معرفی میکنم.
۱. استفاده از Helmet
Helmet.js یک ماژول Node.js است که برای حفاظت از هدرهای HTTP استفاده میشود. این ماژول در اپلیکیشنهای Express کاربرد دارد و با تنظیم هدرهای مختلف HTTP، از حملاتی نظیر Cross-Site Scripting (XSS) و Clickjacking جلوگیری میکند.
چرا حفاظت از هدرهای HTTP مهم است؟
اغلب توسعهدهندگان به هدرهای HTTP بیتوجه هستند. این هدرها میتوانند اطلاعات حساسی درباره سرور، نسخه نرمافزار و حتی ساختار برنامه را افشا کنند. به همین دلیل استفاده از ابزارهایی مانند Helmet.js اهمیت زیادی دارد.
ماژولهای مهم Helmet.js
- X-Frame-Options: جلوگیری از Clickjacking با جلوگیری از نمایش صفحات در iFrame.
- Content-Security-Policy: تنظیم سیاست امنیتی برای جلوگیری از تزریق اسکریپتهای غیرمجاز.
- Cache-Control: غیرفعال کردن کش سمت کلاینت برای اطلاعات حساس.
- Expect-CT: اطمینان از شفافیت گواهی SSL.
- X-Powered-By: حذف هدرهایی که اطلاعات نرمافزار سرور را نمایش میدهند.
- X-XSS-Protection: فعال کردن محافظت در برابر حملات XSS در مرورگرها.
- Strict-Transport-Security: مجبور کردن مرورگر برای استفاده از HTTPS.
برای شروع کار با Helmet.js کافیست این ماژول را نصب کرده و در برنامه Express خود استفاده کنید.
const helmet = require('helmet'); const express = require('express'); const app = express(); app.use(helmet());
۲. استفاده ایمن از کوکیها
برای اطمینان از اینکه کوکیها باعث آسیبپذیری برنامه نمیشوند، استفاده از نام پیشفرض کوکیهای جلسه را متوقف کنید و گزینههای امنیتی کوکی را به درستی تنظیم کنید.
مشکلات رایج کوکیها
اگر کوکیها به درستی تنظیم نشوند، میتوانند اهدافی ساده برای حملات Cross-Site Scripting یا افشای اطلاعات شوند. استفاده از تنظیمات دقیق برای کوکیها این خطرات را کاهش میدهد.
تنظیمات پیشنهادی
- secure: اطمینان از ارسال کوکیها فقط از طریق HTTPS.
- httpOnly: محدود کردن دسترسی کوکیها به جاوااسکریپت سمت کلاینت.
- domain: مشخص کردن دامنه معتبر برای کوکیها.
- path: محدود کردن مسیرهایی که کوکیها معتبر هستند.
- expires: تعیین تاریخ انقضا برای کوکیهای پایدار.
const session = require('cookie-session');
const express = require('express');
const app = express();
const expiryDate = new Date(Date.now() + 60 * 60 * 1000); // 1 ساعت
app.use(session({
name: 'session',
keys: ['key1', 'key2'],
cookie: {
secure: true,
httpOnly: true,
domain: 'example.com',
path: 'foo/bar',
expires: expiryDate
}
}));
۳. Prevent NoSQL injections
تزریق NoSQL یکی از حملات رایج در اپلیکیشنهایی است که از پایگاهدادههای NoSQL استفاده میکنند. این حمله ممکن است به مهاجم اجازه دهد اطلاعات حساس را استخراج کند.
راهحل
با استفاده از پکیج express-mongo-sanitize میتوانید دادههای ورودی را پاکسازی کرده و از این نوع حملات جلوگیری کنید.
$ npm install express-mongo-sanitize
const mongoSanitize = require('express-mongo-sanitize');
app.use(mongoSanitize());
۴. جلوگیری از حملات ReDoS
حملات ReDoS یا Denial of Service در Regular Expression ممکن است باعث کاهش عملکرد سرور شوند. از ابزار safe-regex برای بررسی ایمن بودن عبارات منظم استفاده کنید.
مثال
var safe = require('safe-regex');
var regex = process.argv.slice(2).join(' ');
console.log(safe(regex));
۵. جلوگیری از حملات CSRF
برای حفاظت از برنامه در برابر حملات CSRF که به مهاجمان امکان ارسال درخواستهای مخرب از طریق مرورگرهای معتبر را میدهند، از ماژول csurf استفاده کنید.
const csrf = require('csurf');
app.use(csrf());