Экранирование перед записью в БД

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
t3rmit
Сообщения: 23
Зарегистрирован: 2014.04.29, 10:46

Экранирование перед записью в БД

Сообщение t3rmit »

Есть готовая наполненая БД, в которой все почти все текстовые поля обработанные функциями htmlspecialchars + addslashes до вставки.
Сейчас работаю с этими данными в yii2.
В каждой модели в afterFind() достаю первоначальное значение:

Код: Выделить всё

        $this->text = htmlspecialchars_decode($this->text);
        $this->description = stripslashes(htmlspecialchars_decode($this->description));
        $this->meta_description = stripslashes(htmlspecialchars_decode($this->meta_description));
 
и наоборот обрабатываю в beforeSave():

Код: Выделить всё

            $this->text = htmlspecialchars($this->text);
            $this->description = addslashes(htmlspecialchars($this->description));
            $this->meta_description = addslashes(htmlspecialchars($this->meta_description));
 
Есть ли способ автоматизировать это? Готовые фильтры или еще что-то? Чтобы применялось addslashes и stripslashes ко всем полям типа varchar.
PS: Как yii2 защищает от sql-инъекций? Потому что в БД данные не екранируются по умолчанию.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Экранирование перед записью в БД

Сообщение zelenin »

поведение. вот например https://github.com/vova07/yii2-start-bl ... og.php#L82
Аватара пользователя
iAchilles
Сообщения: 41
Зарегистрирован: 2014.09.11, 19:44

Re: Экранирование перед записью в БД

Сообщение iAchilles »

t3rmit писал(а): PS: Как yii2 защищает от sql-инъекций? Потому что в БД данные не екранируются по умолчанию.
параметризованные запросы, используется PDO. /Экранирование хранимых данных в БД никакого отношения по большему счету к SQL injection не имеет, а используется для того, чтобы предостеречь от типа XSS атак, и в данном случае лучше использовать htmlpurifier, который имеет просто огромное множество настроек и приведет данные введенные пользователем в нужный вам вид, а затем вы их сохраните в бд.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Экранирование перед записью в БД

Сообщение maleks »

[quote=t3rmit]Есть готовая наполненая БД, в которой все почти все текстовые поля обработанные функциями htmlspecialchars + addslashes до вставки. [/quote]
Абсолютно неграмотно сделано было.
t3rmit
Сообщения: 23
Зарегистрирован: 2014.04.29, 10:46

Re: Экранирование перед записью в БД

Сообщение t3rmit »

в данном случае лучше использовать htmlpurifier, который имеет просто огромное множество настроек и приведет данные введенные пользователем в нужный вам вид, а затем вы их сохраните в бд
Абсолютно неграмотно сделано было.
В моем случае, я переганяю данные из старой БД в новую с помощью консольной команды. Поэтому могу изменить даные перед сохранением. В каком виде их лучше пересохранить? Вернуть к исходным с помощью htmlspecialchars_decode, stripslashes... Не повлияет ли это на безопастность, с учетом, что буду екранировать содержимое перед выводом с помощью

Код: Выделить всё

Html::encode() 
?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Экранирование перед записью в БД

Сообщение maleks »

htmlspecialchars_decode надо сделать.
stripslashes скорее всего не нужна. Посмотри в базе у тебя апострофы идут же без экранирования?
Если addslashes использовалась одна, то это было сделано как защита от SQL-inj и данные она не трансформировала.

Обрабатывать Html::encode() на выводе - это и есть безопасность.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Экранирование перед записью в БД

Сообщение lynicidn »

Код: Выделить всё

rules()
{
return ['text', 'filter', 'filter' => 'addslashes'];
} 
Ответить