Код-ревью Middle OWASP Top 10 и API Top 10 обновлено
Ревью: эндпоинт профиля на Express
Вопрос
Найдите проблемы безопасности в обработчиках API.
app.get('/api/users/:id', auth, async (req, res) => {
const user = await db.users.findById(req.params.id);
res.json(user);
});
app.patch('/api/users/:id', auth, async (req, res) => {
try {
await db.users.update(req.params.id, req.body);
res.json({ ok: true });
} catch (e) {
res.status(500).json({ error: e.stack });
}
});
Коротко
Типичный набор API-проблем из OWASP API Top 10: BOLA, лишние свойства в ответе, mass assignment и неправильная обработка ошибок. Исправление: проверка владельца или роли в каждом обработчике (лучше централизованно), DTO для входа и выхода, общий обработчик ошибок.
Что должен найти ревьюер
- Безопасностьстрока 2BOLA: нет проверки, что
req.params.idсовпадает с текущим пользователем или что у него есть право смотреть чужой профиль. - Безопасностьстрока 3Отдаётся весь объект из базы: хеш пароля, внутренние флаги и другие лишние поля. Нужен явный список полей ответа (DTO).
- Безопасностьстрока 8Mass assignment:
req.bodyцеликом пишется в базу, можно поменятьrole,balance,email_verified. Нужен allowlist полей. - Безопасностьстрока 8Та же BOLA при записи: можно изменить чужого пользователя.
- Безопасностьстрока 11Стектрейс уходит клиенту: раскрывает пути, версии и структуру. Логировать на сервере, клиенту общий текст и id ошибки.
Разбор
Типичный набор API-проблем из OWASP API Top 10: BOLA, лишние свойства в ответе, mass assignment и неправильная обработка ошибок. Исправление: проверка владельца или роли в каждом обработчике (лучше централизованно), DTO для входа и выхода, общий обработчик ошибок.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «OWASP Top 10 и API Top 10»
- Первое место OWASP Top 10
- BOLA в API
- Unrestricted Resource Consumption
- Зачем ASVS
- BFLA
- CWE и CVE
- OWASP API Top 10 2023
- Базовые принципы защиты