Главная Часть 1. Создание блога Глава 8. Техническая часть Что такое fillable и guarded? Как быстро заполнить fillable в laravel?

Что такое fillable и guarded? Как быстро заполнить fillable в laravel?

laravel fillable

Добрый день!

Есть такая проблема в laravel, что нельзя вставлять в таблицу базы данных какую-либо информацию до тех пор, пока не заполнишь в моделе массив fillable. Но вот в чем проблема - колонок в таблице может быть много, и как перечислить их все? Ходят слухи, что достаточно вставить звездочку в массив [*] - но это неправда. Однако есть другой способ..

Зачем нужен fillable в laravel?

Несмотря на то, что любой программист знает, что основная дыра в безопасности - ввод данных пользователем, все равно мало кто уделяет достаточное внимание валидированию данных из формы, а зря! Программист, пытаясь сэкономить себе время, данные из формы напрямую добавляет в БД (к счастью, не все, но многие).

Давайте представим такую ситуацию. У Вас есть таблица users, и в ней помимо прочей информации (имя, логин, пароль ...) есть такая колонка как: is_admin. Очень банальная уязвимость. Пользователь при регистрации добавляет через инспектор кода дополнительное инпут-поле с таким же именем. И присваивает ему значение 1. Какой будет результат? Пользователь сразу же получит все права админа после регистрации. Именно для таких случаев в laravel и существуют два отличных массива: fillable и guarded.

В случае, если в массив fillable не указать колонку is_admin, вылезет ошибка, и пользователь, встроивший данное поле зарегистрироваться уже не сможет!

Какая разница между fillable и guarded?

Разница очень даже простая. В массив fillable мы указываем колонки, которые разрешаем заполнять, а в guarded - которые запрещаем. Таким образом, если разобрать пример выше, то можно лишь добавить:

И все остальные колонки теперь будут разрешены к записи.

Как заполнить массив fillable всеми колонками?

Вероятно, Вы уже догадались как это можно легко сделать: пойти противоположным путем, и добавить такую запись:

Этой строкой мы показали, что никакую колонку не надо защищать, а это значит, что теперь для записи открыты сразу все колонки! Тоже самое, что просто перечислить названия всех полей в таблице в массиве fillable. Разве что так гораздо быстрее.

Безопасно ли так делать?

Если Вы, как и я, тщательно валидируете все поступающие данные от юзера, и фильтруете их - однозначно да. Вообще, скажу я Вам, в большинстве таблиц делать это безопасно. Далеко не везде есть такая колонка, как is_admin из примера. Например, если таблица содержит в себе перечень товаров, и имеет заполняемые колонки (название, цена, рейтинг) - то здесь такая защита от массового заполнения больше мешает, чем помогает.

Сегодня мы узнали как быстро заполнить массив fillable в laravel.

Полезные статьи Вам на почту!

Нас более 700 человек!

Это может быть Вам интересно:

Комментарии

Вова
0

Спасибо! Именно то что искал! Тоже пробовал писать array(*) но не вышло. А через guard получилось!

26.03.2018
Марина
0

Класс! Спасибо

31.03.2018

У меня тоже через guard всё вышло. Спасибо.

12.04.2018

Оставить комментарий

Поделиться