Eloquent - Для чего действительно нужен $ fillable? - PullRequest
4 голосов
/ 24 апреля 2020

Это то, что Laravel документ говорит:

Чтобы начать, вы должны определить, какие атрибуты модели вы хотите сделать массовыми назначаемыми. Вы можете сделать это, используя свойство $ fillable в модели

Так почему бы просто не позволить всем атрибутам быть назначенными методами -> fill () / :: create ()?

Ответы [ 3 ]

5 голосов
/ 24 апреля 2020

Программные платформы иногда позволяют разработчикам автоматически связывать параметры HTTP-запроса с переменными или объектами программного кода, чтобы упростить использование этой среды для разработчиков. Иногда это может причинить вред.

Злоумышленники могут иногда использовать эту методологию для создания новых параметров, которые разработчик никогда не предполагал, которые, в свою очередь, создают или перезаписывают новую переменную или объекты в программном коде, который не был предназначен.

Это называется Уязвимость массового назначения .

И laravel поставщик , заполняемый для уязвимости массового назначения , это белый список для полей.

Уязвимость массового назначения возникает, когда пользователь передает неожиданный параметр HTTP через запрос, и этот параметр изменяет столбец в вашей базе данных, которого вы не ожидали. Например, злонамеренный пользователь может отправить параметр is_admin через HTTP-запрос, который затем передается в метод создания вашей модели, позволяя пользователю перейти в администрацию.

2 голосов
/ 24 апреля 2020

Важно всегда добавлять атрибуты , которые вы хотите редактировать , в массив $ fillable . Вам нужно будет указать в модели атрибут fillable или protected , так как все модели Eloquent по умолчанию защищают от массового назначения. Итак, что такое массовое назначение? Согласно документу Laravel:

Уязвимость массового назначения возникает, когда пользователь передает неожиданный параметр HTTP через запрос, и этот параметр изменяет столбец в вашей базе данных, которого вы не ожидали. Например, злонамеренный пользователь может отправить параметр is_admin через HTTP-запрос, который затем передается в метод создания вашей модели, позволяя пользователю перейти в администратор.

2 голосов
/ 24 апреля 2020

Хороший вопрос! Это может пролить некоторый свет:

Чтобы упростить сохранение / обновление данных из формы Laravel позволяет выполнять User::update($request->all());

Теперь представьте меня злым пользователем: я вмешиваюсь в заполните форму и добавьте следующее поле: ['role' => 'supermegaadmin'] вы сохраните ее в базе данных, и я получу роль, которую я не должен получить (это слишком упрощенный сценарий c, но он должен помочь вам понять смысл )

Затем вы можете использовать $fillable и $guarded для более точного управления полями, которые могут быть назначены по массе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...