Как защитить Node.js API
Вопрос
Какие меры безопасности ты закладываешь в новый Node.js API?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Валидация всего входа схемой, белый список полей (против mass assignment)
Параметризованные запросы или ORM, никакой склейки SQL
Пароли: argon2id/scrypt/bcrypt; секреты в env или менеджере секретов, не в git
Rate limiting на вход и дорогие эндпоинты, общий счётчик в Redis
Заголовки безопасности (helmet), лимит тела запроса, без стеков в ответах
Зависимости: lock-файл, npm audit в CI, обновления
Что могут спросить следом
- Как ты проверяешь права доступа к конкретному объекту?
- Что будешь делать, если секрет утёк в git?
- Как защититься от SSRF?
Разбор
Начинаю с границы: каждый входящий запрос валидирую схемой, zod или class-validator, и беру только разрешённые поля. Это закрывает и невалидные типы, и mass assignment, и NoSQL-инъекции. Ограничиваю размер тела.
К базе хожу только параметризованными запросами, через ORM или плейсхолдеры, сырой SQL без параметров запрещён на ревью. Пароли храню через argon2id или bcrypt. Секреты лежат в переменных окружения или менеджере секретов, в репозитории их нет.
На вход, восстановление пароля и отправку кодов ставлю rate limiting с общим счётчиком в Redis. Включаю helmet для заголовков безопасности, клиенту отдаю ошибки без стеков.
Кроме того, проверяю авторизацию на уровне объекта: не только «пользователь вошёл», но и «это его заказ». И слежу за зависимостями: lock-файл, npm audit в CI, регулярные обновления.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Безопасность бэкенда»
- Безопасный INSERT: параметры и белый список колонок
- CORS: проверка Origin по белому списку
- Проверка claims JWT после подписи
- deepMerge без prototype pollution
- Rate limiter на token bucket
- Кто превысил лимит запросов: скользящее окно
- NoSQL-инъекция в MongoDB
- Как хранить пароли