#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