Нужно ли использовать CHtml::encode в TbDetailView?

Я использую Yii в качестве PHP Framework, и когда мне нужно отобразить некоторую информацию из базы данных, я всегда использую CHtml::encode для повышения безопасности.

Мой вопрос: нужно ли мне делать то же самое, когда я отображаю значения в виджетах Yii, таких как TbDetailView или TbGridView?

Например, нужен ли CHtml::encode в приведенном ниже коде?

<?php $this->widget('bootstrap.widgets.TbDetailView',array(
'data'=>$model,
'attributes'=>array(
    'id',
    'nome',
    'descricao',
    'origem',
            array('label'=>'Tipo de Refeição', 'value'=>CHtml::encode($model->tipoRefeicao ? $model->tipoRefeicao->nome : '')),
            array('label'=>'Ativo', 'value'=>CHtml::encode($model->ativo ? 'Sim' : 'Não')),
),
)); ?>

person Everton Mendonça    schedule 25.06.2014    source источник


Ответы (1)


Функция CHtml::encode() является оболочкой для PHP htmlspecialchars кодирует специальные символы в объекты HTML. некоторые символы имеют особое значение в HTML и должны быть представлены объектами HTML, если они должны сохранить свое значение, выполняемое преобразование

 - '&' (ampersand) becomes '&amp;'
 - '"' (double quote) becomes '&quot;' 
 - "'" (single quote) becomes '&#039;'   
 - '<' (less than) becomes '&lt;'    
 - '>' (greater than) becomes '&gt;'

Это означает, что если это поле в БД, вероятно, будет иметь какой-либо из этих символов, вам придется его кодировать, иначе это может нарушить вывод HTML, если нет, то нет необходимости его кодировать

person Manquer    schedule 25.06.2014
comment
Спасибо за ваш ответ! - person Everton Mendonça; 25.06.2014
comment
@manquer, так что, по сути, вы говорите, что если вы не можете доверять информации, то закодируйте ее. - person crafter; 26.06.2014
comment
доверие означает, что это безопасно, кодирование не защищает вас от XSS или подобных атак. Я бы скорее сказал, что если вы не можете контролировать/ограничивать пользовательский ввод, то кодируйте, например, вы разрешаете форматирование html в текстовой области, например, в этом поле для комментариев. тогда вам нужно закодировать его, прежде чем он будет показан в пользовательском интерфейсе. В противном случае, если я добавлю два закрывающих элемента div, например, ‹/div›‹/div› как часть комментария, это полностью испортит макет. - person Manquer; 26.06.2014
comment
не могли бы вы дать направление, что тогда может защитить от XSS? Мне это действительно помогло, потому что вставка тегов ‹script› больше не будет работать. - person Tebe; 19.08.2017