Посоветуйте, как упростить работу с Html::encode
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Посоветуйте, как упростить работу с Html::encode
Всем привет. Есть допустим проект, в котором определенное количество моделек Active Record, в каждой есть свои атрибуты, доступные для ввода юзером и есть большая куча вьюшек. Задача - предотвратить XSS. Собственно в валидацию кидаем HtmlPurifier для полей, где доступен html ввод, а отображение обычных полей во вьюшках выводим через Html::encode. Есть какой-то вариант глобально задать поведение атрибутов при выводе, чтобы не надо было везде прописывать Html::encode?
Кто как работает?
Кто как работает?
Re: Посоветуйте, как упростить работу с Html::encode
Пурифить при выводе.
Энкодить тоже.
Создал обёртку и теперь echo e($model->name) и энкод во вьюшках не напрягает.
Энкодить тоже.
Создал обёртку и теперь echo e($model->name) и энкод во вьюшках не напрягает.
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: Посоветуйте, как упростить работу с Html::encode
1) ну пурифить каждый раз при выводе, насколько я читал и понял из доки - весьма прожорливая вещь (поэтому вроде как рекомендуется ее ставить на beforesave)
2) ща пока пришел к решению strip_tags в beforeValidate / beforeSave на все атрибуты с пользовательским вводом, где не должно быть html
Re: Посоветуйте, как упростить работу с Html::encode
В доках ничего такого не рекомендуется, предлагается использовать кеш:
<?= \yii\helpers\HtmlPurifier::process($description) ?>
Note that HtmlPurifier processing is quite heavy so consider adding caching.
не нужно все это. Чтобы Html::encode не бояться "забыть" посмотрите в сторону шаблонизаторов.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Посоветуйте, как упростить работу с Html::encode
Ни в коем случае. Кешировать — ОК, но не в beforeSave.1) ну пурифить каждый раз при выводе, насколько я читал и понял из доки - весьма прожорливая вещь (поэтому вроде как рекомендуется ее ставить на beforesave)
Нравится Yii? Давайте сделаем его лучше!.
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: Посоветуйте, как упростить работу с Html::encode
Все понял, спс
P.S. strip_tags не вариант использовать, потому что <b>фамилия (поле 1) и имя </b> (поле2) - не очищается, поэтому можно спокойно провести xss, так что возвращаемся к обычному Html::encode()
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: Посоветуйте, как упростить работу с Html::encode
Допустим есть форма для ввода контактной инфы по юзеру, там есть поля фамилия, имя, отчество. Если вбиваем в фамилию и имя значения с неполными тегами, например, "<b>вася" и 2 значение - "пупкин</b>", то strip_tags не сработает по регулярке, и если на сайте предусмотрена склейка в фио в одну строку, то будет выделение жирным. Так что энкодить надо в любом случае
Re: Посоветуйте, как упростить работу с Html::encode
Не замечаю такого поведения. Все вырезает.
Код: Выделить всё
print htmlspecialchars(strip_tags('<b>fff'));// fff
Re: Посоветуйте, как упростить работу с Html::encode
модель никак не соотносится с выводом данных. модель должна хранить исходные, введенные юзером, данные, если не существует бизнес-требования, что данные должны быть очищены от html-тегов например, потому что потому.Ghost_nsk писал(а): ↑2017.09.23, 08:26 Всем привет. Есть допустим проект, в котором определенное количество моделек Active Record, в каждой есть свои атрибуты, доступные для ввода юзером и есть большая куча вьюшек. Задача - предотвратить XSS. Собственно в валидацию кидаем HtmlPurifier для полей, где доступен html ввод, а отображение обычных полей во вьюшках выводим через Html::encode. Есть какой-то вариант глобально задать поведение атрибутов при выводе, чтобы не надо было везде прописывать Html::encode?
Кто как работает?
XSS - это не бизнес требование, а значит чистить данные ты должен при выводе во вьюхе, причем существует другой кейс - вывод в консоли - где данные можно и нужно отдавать как есть.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Посоветуйте, как упростить работу с Html::encode
А кроме консоли ещё и REST API, push-нотификации и т.д. и т.п.
Нравится Yii? Давайте сделаем его лучше!.
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: Посоветуйте, как упростить работу с Html::encode
Все понял, ребята, спасибо за полезную инфу