Защита от XSS и обратный слеш

173
19 апреля 2018, 10:41

На клиенте перед отправкой на сервер отсекаю практически всё за исключением русского, украинского и белорусского шрифтов. Делаю это в первую очередь чтобы пользователь сразу понимал, какие символы он ввести не может.

data = data.replace(/[^\w\n\" а-яА-ЯёЁA-Za-zÀ-ÿёа-зй-шы-яЁА-ЗЙ-ШЫІіЎўа-щА-ЩЬьЮюЯяЇїІіЄєҐґ'-,.:!?@«»]/ig, ''); 

Обработанные строки заносятся в объект и преобразуются в строку:

obj = JSON.stringify(obj);

С целью защиты от XSS проверяю данные на сервере, при этом строка не разбирается перед записью в БД, но проверяется целиком:

$obj = preg_replace("/[^\w\"\n а-яА-ЯёЁA-Za-zÀ-ÿёа-зй-шы-яЁА-ЗЙ-ШЫІіЎўа-щА-ЩЬьЮюЯяЇїІіЄєҐґ',-.!?@{{}}:«»]/iu", "", $obj) ;

Проблема: если на клиенте в тексте встречаются двойные кавычки, они экранируются обратным слешем при JSON.stringify(obj), а уже на сервере обратный слеш отрезается при preg_replace, после чего строку вновь преобразовать в объект при чтении уже нельзя.

Я вижу несколько вариантов решения:

  1. Не удалять слеш изначально, поскольку в сочетании с оставшимися символами использовать его для атаки нельзя (так ли это?).
  2. Санировать данные на сервере не при записи, а при чтении из БД (в этом случае дополнительный расход ресурсов, поскольку чтение происходит гораздо чаще записи в моём случае).
  3. Разбирать построчно на сервере, а перед записью вновь собирать в строку (также расход ресурсов).
  4. С помощью регулярного выражения отслеживать и оставлять последовательность \".

Прошу совета, как лучше поступить в этой ситуации.

READ ALSO
php, как установить и запустить на Ubuntu 16.04?

php, как установить и запустить на Ubuntu 16.04?

Не могу установить и настроить сервер для php, до этого учил djangoТам все просто установил Python , запустил venvironment и работаешь спокойно

157
Функция автозагрузки классов

Функция автозагрузки классов

spl_autoload_register — Регистрирует заданную функцию в качестве реализации метода __autoload()

170
Некорректная работа move_uploaded_file в open server

Некорректная работа move_uploaded_file в open server

Есть скрипт загрузки изображения на phpПроблема в том, что при указании пути к директории загрузки в таком виде: $upload_dir = 'C:\server\openserver\domains\elektra

172
PHP дaнные чeрез SQL

PHP дaнные чeрез SQL

ПриветствуюКaким обрaзом узнaть значeние пользователя в БД через PHP, чтобы поставить условие - если значение пользователя в бд равно 'open' то открыть...

160