На днях Артем Кривокрисенко опубликовал
информацию о методах защиты против «Like Injection».
Признаюсь, о таком типе атак я даже не думал :) В свое оправдание могу сказать
только, что проблематично придумать ситуацию, в которой эксплуатация этой штуки
злоумышленником могла бы принести вред, во всяком случае я такого сценария пока
не придумал. Но вот сделать менее удобной работу обычных пользователей –
вполне. Поэтому будем иметь в виду.
Like Injection
Вы знаете, что такое SQLInjection, знаете какой вред
он может нанести базе данных, используете только параметризированые запросы, а
если необходимо выполнять конкатенцию, то, конечно, заменяете недопустимые
символы? И думаете что ваше приложение безопасно? Гм, я бы так не думал...
Оказывается, есть еще одна дырка. Не такая
опасная, как SQLInjection, тем не менее, дырка.
Итак вотваш SQL-запрос:
SELECT*FROM Users WHERE UserName Like
UserName +'%'
Все логично. Человек вводит "Art", при конкатенции получаем "Art%" запрос ищет всех пользователей, чье имя
начинается на Art. Ничего
криминального.
Верно?
Неверно.
Пользователю не интересны пользователи, чьи
имена начинаются на "Art". Его больше интерисуют те, чьи имена
начинаются на "%WAZZZZUP". Этот текст я и ввожу в программу. А
что она ищет? Ищет полный бред - выдаст всех пользователей, у которых в имени
есть "WAZZUP". В
результате клиенты несут убытки из-за непредсказуемо работающего ПО,
компания-разрабочтик выплачивает огромные неустойки.
Что же делать?
А делать нужно совсем немного - всего лишь
несколько замен символов:
символ...
...меняем на
[
[[]
%
[%]
_
[_]
Вот, собственно, и все.
Артем
Кривокрисенко
В этой рассылке я публикую то, что считаю
интересным (для себя в первую очередь) и полезным (для вас в первую очередь :)
). Но хотелось бы услышать ваше мнение – что бы вы хотели видеть в рассылке?
Какие вопросы нужно осветить подробнее, на что обратить внимание? Пишите: pavel@vbnet.ru , ICQ: 326066673