Очень интересный вариант защиты от SQL-инъекций и XSS

Aug 02, 2010 12:02


Один весьма мной уважаемый гн Ден Каминский (Dan Kaminsky - известен благодаря обнаружению им фундаментальной уязвимости в DNS ) предложил очень интересную универсальную технику защиты от SQL injection и XSS.

Метод очень просто и от того гениален.

Суть техники сводится в подстановке в SQL-запросах всех данных в base64-представлении и таким образом нет смысла использовать какие либо парсеры/анализаторы используемых в SQL-запрос данных (placeholders и т.д.)

Все это можно грубо описать строкой типа:
«SELECT * from mytable where textfield=base64_decode('Q29vbEhhY2tlcnM=')»
где base64_decode - функция декодирования из base64, релализуемая конкретной БД.

В base64 отстуствуют спецсимволы и следовательно никаких угроз нашему запросу от вносимых в него данных не будет. Нет необходимости как-то экранировать или изменять входные данные. Достаточно закодировать их в base64 и передать в запросе.

Техника применима также и на клиентской стороне - если надо убрать данные в кавычки например в обработчике событий либо же в js. Разкодировка из base64 может быть выполнена прямо в js когда необходимо получить оригинальные данные.

С моей точки зрения метод гениален. Недостатков (по моему мнению) два - увеличение памяти под хранимые таким образом переменные составит 30% (особенность base-64 кодирования), а также повышение нагрузки на сервер из-за необходимости кодирования входных параметров (считаю что можно пренебречь), и нагрузки на сервер БД из-за необходимости разкодирвания (а вот этим я думаю пренебречь не получится).

P.S. Ещё раз повторюсь - метод гениальный!

SQL-инъекции, идея, экранирование значений

Previous post Next post
Up