Выбор ответа Middle Безопасность бэкенда обновлено
Mass assignment
Вопрос
Что не так в обработчике обновления профиля?
app.patch('/me', async (req, res) => {
const user = await prisma.user.update({
where: { id: req.user.id },
data: req.body,
});
res.json(user);
});
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Mass assignment: можно прислать role: admin; брать только разрешённые поля. Всё тело запроса уходит в обновление, и пользователь может изменить любое поле модели, включая роль или флаги.
Варианты ответа
- Ничего, Prisma сама отфильтрует опасные поля модели
- Mass assignment: можно прислать
role: admin; брать только разрешённые поляправильный ответ - SQL-инъекция через
req.body, Prisma подставит строку - Метод PATCH нельзя использовать для профиля, нужен PUT
Разбор
Всё тело запроса уходит в обновление, и пользователь может изменить любое поле модели, включая роль или флаги. Правильно: валидировать тело схемой с явным списком полей (имя, аватар) и передавать в data только их. Отдавать наружу лучше тоже не всю запись: в ней может быть хеш пароля.
- Prisma проверяет типы полей модели, но не права на них.
- Инъекции нет: Prisma параметризует запрос.
- PATCH для частичного обновления как раз подходит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Безопасность бэкенда»
- Безопасный INSERT: параметры и белый список колонок
- CORS: проверка Origin по белому списку
- Проверка claims JWT после подписи
- deepMerge без prototype pollution
- Rate limiter на token bucket
- Кто превысил лимит запросов: скользящее окно
- Код-ревью: регистрация, вход и сброс пароля
- Как хранить пароли