Выбор ответа 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; брать только разрешённые поля. Всё тело запроса уходит в обновление, и пользователь может изменить любое поле модели, включая роль или флаги.

Варианты ответа

  1. Ничего, Prisma сама отфильтрует опасные поля модели
  2. Mass assignment: можно прислать role: admin; брать только разрешённые поляправильный ответ
  3. SQL-инъекция через req.body, Prisma подставит строку
  4. Метод PATCH нельзя использовать для профиля, нужен PUT

Разбор

Всё тело запроса уходит в обновление, и пользователь может изменить любое поле модели, включая роль или флаги. Правильно: валидировать тело схемой с явным списком полей (имя, аватар) и передавать в data только их. Отдавать наружу лучше тоже не всю запись: в ней может быть хеш пароля.

  • Prisma проверяет типы полей модели, но не права на них.
  • Инъекции нет: Prisma параметризует запрос.
  • PATCH для частичного обновления как раз подходит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме