User::create() безопасен в Laravel?
Я пытаюсь сделать мой Laravel UserController
насколько это возможно, без использования каких-либо дополнительных пакетов, таких как Ardent (я нахожу это ненужным; перебор).
Это мое postRegister()
функция, функция, которая направляется, когда пользователь нажимает кнопку "отправить" в форме регистрации.
public function postRegister() {
$validator = new Services\Validators\RUser;
if ($validator->passes()) {
User::create(Input::all());
return Redirect::to('login');
}
return Redirect::to('register')->withInput()->withErrors($validator->getErrors());
}
Я отправил все входные данные для проверки в другом классе, а затем просто вызываю класс статически User::create()
, Мне интересно, безопасно это или нет. У меня есть все, кроме id
а также password_confirmation
назначается масса, а пароль хешируется в функции мутатора.
Если это не безопасный способ управления созданием пользователя, как еще мне это сделать? Должен ли я вместо этого создать экземпляр объекта и назначить значения вручную? Заранее спасибо.
2 ответа
По сути, функция Model::Create выполняет следующие действия:
- Создание экземпляра новой модели
- Используя входной массив, заполните все неохраняемые / заполняемые атрибуты модели, используя set-mutators, если доступно
- Сохранить модель в БД
- Возвращаемая модель
Поэтому до тех пор, пока вы добавляете поля, которые не хотите назначать по массе, в свой массив $ guarded (или исключаете их из массива $ fillable), не должно быть никаких угроз безопасности. Функциональность примерно такая же, как создание модели постепенно, а затем ее сохранение.
Рекомендация: проверка входных данных должна происходить внутри модели во время события "сохранение" или "создание". Если вы вернете false во время одного из этих событий, вы остановите создание модели.
Пока вы заполняете модели $fillable
массив только с теми значениями, которые вы хотите назначить массово, это безопасно. Проверка всех $fillable
Затем значения добавляет защитный элемент, о котором вы спрашиваете.
Это гарантирует, что только значения в $fillable
когда-либо заполняются на модели с любым другим входом игнорируется.