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

#php #yii #yii-chtml

#php #yii #yii-chtml

Вопрос:

Я использую Yii в качестве фреймворка PHP, и когда мне нужно отобразить некоторую информацию из базы данных, я всегда использую 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')),
),
)); ?>
  

Ответ №1:

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

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

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

Комментарии:

1. Спасибо за ваш ответ!

2. @manquer, по сути, вы говорите, что если вы не можете доверять информации, то закодируйте ее.

3. «доверие» подразумевает, что оно безопасно, кодирование не защищает вас от XSS или подобных атак. Я бы скорее сказал, что если вы не можете контролировать / ограничивать ввод пользователя, тогда кодируйте, например, вы разрешаете форматирование html в текстовой области, например, в этом поле для комментариев. затем вы должны закодировать его, прежде чем он будет показан в пользовательском интерфейсе. В противном случае, если я добавлю два закрывающих раздела, подобных этому </div></div>, как часть комментария, это полностью испортит макет

4. не могли бы вы указать, что тогда может защитить от XSS? Я хоть и это действительно помогло, потому что супер свет и прочный <script> tags won’t work anymore