Всем привет!
Столкнулся с проблемой, что пользователь при регистрации может ввести в поле html код и он отобразится.
Можно защититься, выводя данные в CHtml::encode();
Но беда в том, что в БД уже будет находиться вредоносный код.
Как элегантно сделать фильтрацию вводимых пользователем данных при массовом присваивании?
Безопасность вводимых данных
Re: Безопасность вводимых данных
Угу, спасибо. А как бы красиво сделать фильтрацию для всех входящих данных, не перечисляя их в rules?
Re: Безопасность вводимых данных
В beforeSave можно сделать.
Re: Безопасность вводимых данных
Я обычно делаю очистку входных данных от ненужного муссовра, в поведении (behavior), в которой СHtmlPurifier очищает все свойства которые я ему передаю.
Это удобно если ХТМЛ код вводится для нескольких моделей, и не нужно писать всегда повторно тот же код.
Это удобно если ХТМЛ код вводится для нескольких моделей, и не нужно писать всегда повторно тот же код.
Re: Безопасность вводимых данных
Поделитесь кодом, пожалуйстаvova07 писал(а):Я обычно делаю очистку входных данных от ненужного муссовра, в поведении (behavior), в которой СHtmlPurifier очищает все свойства которые я ему передаю.
Это удобно если ХТМЛ код вводится для нескольких моделей, и не нужно писать всегда повторно тот же код.
Re: Безопасность вводимых данных
Сделал на примере из вики:
И в модель добавляем:
Код: Выделить всё
<?php
class CSafeContentBehavior extends CActiveRecordBehavior
{
public $attributes =array();
public $allAttributes = true;
protected $purifier;
function __construct(){
$this->purifier = new CHtmlPurifier;
}
public function beforeSave($event)
{
if($this->allAttributes) {
foreach ($this->getOwner()->getAttributes() as $attribute => $value) {
$this->getOwner()->{$attribute} = CHtml::encode($this->purifier->purify($this->getOwner()->{$attribute}));
}
} else {
foreach($this->attributes as $attribute) {
$this->getOwner()->{$attribute} = CHtml::encode($this->purifier->purify($this->getOwner()->{$attribute}));
}
}
}
}
Код: Выделить всё
public function behaviors()
{
return array(
'CSafeContentBehavor' => array(
'class' => 'application.behaviors.CSafeContentBehavior',
'allAttributes' => true,
),
);
}