Skip to main content
Практика завдань

Як захистити додаток Express.js?

Безпека в Express.js

Забезпечення безпеки API на базі Express.js вимагає комбінації пакетів та найкращих практик. Ось найважливіші рівні безпеки.


1. Helmet — HTTP заголовки безпеки

bash
npm install helmet
js
const helmet = require('helmet'); // Автоматично встановлює 11 заголовків HTTP, пов'язаних із безпекою app.use(helmet()); // Що встановлює helmet: // Content-Security-Policy // X-Frame-Options: DENY // X-Content-Type-Options: nosniff // Strict-Transport-Security (HSTS) // X-XSS-Protection // Referrer-Policy // ...і більше

2. Обмеження швидкості

bash
npm install express-rate-limit
js
const rateLimit = require('express-rate-limit'); // Загальне обмеження швидкості API const apiLimiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 хвилин max: 100, // максимум 100 запитів за вікно standardHeaders: true, legacyHeaders: false, message: { error: 'Занадто багато запитів, будь ласка, спробуйте ще раз пізніше' } }); // Строже обмеження для маршрутів аутентифікації const authLimiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 5, // лише 5 спроб входу за 15 хвилин skipSuccessfulRequests: true, message: { error: 'Занадто багато спроб входу' } }); app.use('/api/', apiLimiter); app.use('/auth/login', authLimiter); app.use('/auth/register', authLimiter);

3. Санітизація вводу

bash
npm install express-mongo-sanitize xss-clean
js
const mongoSanitize = require('express-mongo-sanitize'); const xss = require('xss-clean'); app.use(mongoSanitize()); // запобігає NoSQL ін'єкціям: $where, $gt app.use(xss()); // видаляє HTML теги з вводу

4. Обмеження розміру запитів

js
app.use(express.json({ limit: '10kb' })); // обмежити розмір JSON тіла app.use(express.urlencoded({ limit: '10kb', extended: true }));

5. HTTPS та HSTS

js
// Примусове перенаправлення на HTTPS у продакшені app.use((req, res, next) => { if (process.env.NODE_ENV === 'production' && !req.secure) { return res.redirect(301, `https://${req.hostname}${req.url}`); } next(); });

6. Змінні середовища

js
// ✅ Добре — секрети в середовищі const JWT_SECRET = process.env.JWT_SECRET; const DB_PASSWORD = process.env.DB_PASSWORD; // ❌ Погано — секрети в коді const JWT_SECRET = 'hardcoded-secret';

7. Запобігання забрудненню параметрів

bash
npm install hpp
js
const hpp = require('hpp'); app.use(hpp()); // запобігає: /api?sort=name&sort=price

8. Сховати підпис Express

js
app.disable('x-powered-by'); // або використовуйте helmet(), який робить це автоматично // Видаляє: X-Powered-By: Express заголовок

Контрольний список безпеки

#ПунктПакет
HTTP заголовки безпекиhelmet
Обмеження швидкостіexpress-rate-limit
Налаштування CORScors
Санітизація вводуexpress-mongo-sanitize, xss-clean
Обмеження розміру запитівexpress.json({ limit })
JWT з коротким терміном діїjsonwebtoken
Хешування паролівbcryptjs (12+ раундів)
Примус HTTPSnginx / middleware перенаправлення
Сховати X-Powered-Byhelmet
Секрети в змінних середовищаdotenv

Резюме

Безпека має багатошарову структуру: почніть з helmet та обмеження швидкості, перевіряйте та санітуйте всі ввідні дані, примушуйте HTTPS, використовуйте надійне хешування паролів і зберігайте секрети в змінних середовища. Ніколи не довіряйте даним з клієнта.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань