Выбор ответа Middle Сессии и безопасность обновлено

Массовое присваивание

Вопрос

Чем опасен код User::create($request->all()) в Laravel, если в модели $guarded = []?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Пользователь пришлёт лишнее поле, например isadmin=1. Пустой $guarded разрешает заполнять любые атрибуты.

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

  1. Ничем: Laravel сам отфильтрует опасные поля вроде is_admin
  2. Запрос упадёт, если полей в запросе больше, чем колонок
  3. Пользователь пришлёт лишнее поле, например is_admin=1правильный ответ
  4. Пароль сохранится без хеширования, других проблем нет

Разбор

Пустой $guarded разрешает заполнять любые атрибуты. Атакующему достаточно добавить поле в форму. Защита: явный $fillable, $request->validated() или $request->only([...]), DTO. Laravel не знает, какие поля опасны. Лишние поля без колонок действительно дадут ошибку SQL, но реальные колонки вроде is_admin запишутся.

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

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