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 выполняет следующие действия:

  1. Создание экземпляра новой модели
  2. Используя входной массив, заполните все неохраняемые / заполняемые атрибуты модели, используя set-mutators, если доступно
  3. Сохранить модель в БД
  4. Возвращаемая модель

Поэтому до тех пор, пока вы добавляете поля, которые не хотите назначать по массе, в свой массив $ guarded (или исключаете их из массива $ fillable), не должно быть никаких угроз безопасности. Функциональность примерно такая же, как создание модели постепенно, а затем ее сохранение.

Рекомендация: проверка входных данных должна происходить внутри модели во время события "сохранение" или "создание". Если вы вернете false во время одного из этих событий, вы остановите создание модели.

Пока вы заполняете модели $fillable массив только с теми значениями, которые вы хотите назначить массово, это безопасно. Проверка всех $fillable Затем значения добавляет защитный элемент, о котором вы спрашиваете.

Это гарантирует, что только значения в $fillable когда-либо заполняются на модели с любым другим входом игнорируется.

Другие вопросы по тегам