YiiFramework Htm::encode где его использовать?

Vano

Новичок
Столкнулся с проблемой - для безопасности, все введенные пользователем данные нужно энкодить. Что делать? Я понял есть 3 варианта:
1. Перед записью в БД
2.1 При выводе во вьюшке везде прописывать Htm::encode на текстовые поля
2.2 При выводе в моделе посоздавать гетФункции для каждого текстового поля (типа поле есть поле name, а я делаю метод
Код:
public function getEncodedName()
{
    return Html::encode($this->name);
}
Во вьюшках позаменять $model->name на $model->encodedName.
Может кто сталкивался как лучше всего, безопаснее, быстрее?
 

Vano

Новичок
Нене, про БД, я имею ввиду, что пользователь в свой ник нейм напишет <script>, так я спрашиваю как легче всего организовать Html::encode, ато попробывал писать во вьюшку - она ппц некрасивым становится
 

Luge

Нестандартное звание
как легче всего организовать
На месте вывода текста необходимо выбрать один из двух вариантов:

  1. Вы хотите вывести данные в виде обычного текста.
  2. Вы хотите вывести данные в виде HTML.
Если вам нужно вывести простой текст, то экранировать лучше следующим образом:

PHP:
<?= \yii\helpers\Html::encode($username) ?>
Если нужно вывести HTML, вам лучше воспользоваться HtmlPurifier:

PHP:
<?= \yii\helpers\HtmlPurifier::process($description) ?>
Обратите внимание, что обработка с помощью HtmlPurifier довольно тяжела, так что неплохо бы задуматься о кешировании.
 
Последнее редактирование:

Luge

Нестандартное звание
Чувак походу autoescape хочет.
а смысл, если там и строка и массив и объект может быть передан?

Да и следовать принципу «эскейпить в шаблоне» проще, чем перед каждым рендером разбирать что за данные выходят (а ещё такое забывается обычно)
 

Vano

Новичок
Ну спасибо. Я спрашиваю где лучше всего использовать Html::encode, а мне отвечают что для предотвращения ХСС атак нужно использовать Html::encode.
А Purifier как и написано сильно время занимает, хочу без него.
 

Вурдалак

Продвинутый новичок
а смысл, если там и строка и массив и объект может быть передан?
Че? Я сейчас про http://twig.sensiolabs.org/doc/tags/autoescape.html В native PHP-шаблонизации это по-нормальному не сделаешь.

Да и следовать принципу «эскейпить в шаблоне» проще, чем перед каждым рендером разбирать что за данные выходят (а ещё такое забывается обычно)
По таком же принципу ты используешь mysql_real_escape_string() вместо плейсхолдеров?
 

Luge

Нестандартное звание

fixxxer

К.О.
Партнер клуба
Ну спасибо. Я спрашиваю где лучше всего использовать Html::encode, а мне отвечают что для предотвращения ХСС атак нужно использовать Html::encode.
Тогда ответ "нигде, за исключением внутренностей template engine".
 

AmdY

Пью пиво
Команда форума
Ну спасибо. Я спрашиваю где лучше всего использовать Html::encode, а мне отвечают что для предотвращения ХСС атак нужно использовать Html::encode.
А Purifier как и написано сильно время занимает, хочу без него.
экранирование и Purifier разные вещи
1. первое - это когда не хотим видеть вставлять html. лучше делать при выводе, так как теоретически могут быть разные типы вывода и экранировать нужно по разному, а иногда где-то и не нужно.
2. это когда нам нужно вывести html. чистить на лету вещь дорогая, потому лучше делать на этапе сохранения, не требование могут меняться, потому нужно делать два поля - одно с оригиналом, второе заэкранированное.
 
Сверху