terkin
@terkin

Валидатор 'safe'?

недавно начал изучение Yii, и никак не могу понять значение этого валидатора, т.е в описании класса есть такое описание — Валидатор CSafeValidator помечает связанные атрибуты как безопасные так, что они могут быть присвоены пакетно.

Но мне к сожалению это не понятно, могли бы вы мне объяснить на пальцах, или на примерах когда нужно использовать этот тип валидатра.
  • Вопрос задан
  • 9572 просмотра
Решения вопроса 1
wartur
@wartur
www.yiiframework.com/doc/guide/1.1/ru/form.model

Все очень просто. Эта такая штука, которая позволяет понять фреймворку, что данный атрибут модели, пришедший из атрибутов (cmodel::attributes) является разрешенным к присвоению к атрибутам модели без валидации. Эту штуку надо юзать осторожно.

например $model->attributes = $_POST['Article'];
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
wartur
@wartur
Да. Произойдет тоже самое.

И я еще вам очень сильно советую. не юзайте safe, его надо использовать тогда когда надо обработать с помощью before/afterValidate. А unsafe юзайте тогда, когда вам надо с одной стороны валидировать элемент перед записью, а с другой стораны не дать возможность записывать его через attributes.
Ответ написан
Комментировать
p4s8x
@p4s8x
Если вы попытаетесь присвоить unsafe то всеравно Cmodel->validate() вернет true, в логах будет Warning unsafe и данное свойство не будет присвоено — зачем?
1) В приложениях на Yii делают то, что называется massive assigment — $model->attributes = $_POST['User']
У модели есть системные свойства типа isNewRecord, primaryKey, scenario.
Если злоумышленник присвоит $_POST['User']['scenario'], то неизвестно что может произойти в приложении — это причина по которой вообще разделяют safe\unsafe.
2) Следующий вариант атаки — передать в пост запросе например $_POST['User']['is_admin']=1

когда нужно использовать этот тип валидатра.

Например для полей в mysql типа TEXT/LONGTEXT
Ответ написан
@Fredoss
По-простому я бы написал ответ так: используйте валидатор safe, когда вам по фик, какое значение может принять валидируемый атрибут при массовом присвоении:)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы