Страница: 1 |
Страница: 1 |
Вопрос: Like Injection
Добавлено: 19.03.07 17:12
Автор вопроса: Artyom
Вы знаете что такое SQL Injection, знаете какой вред он может нанести базе данных, используете только параметризированые запросы, а если необходимо выполнять конкатенцию, то, конечно, заменяете недопустимые символы? И думаете что ваше приложение безопасно? Гм, я бы так не думал...
Оказывается, есть еще одна дырка. Не такая опасная, как SQL Injection, тем не менее, дырка.
Итак вот ваш SQL-запрос:
Все логично. Человек вводит "Art", при конкатенции получаем "Art%" запрос ищет всех пользователей, чье имя начинается на Art. Ничего криминального.
Верно?
Неверно.
Пользователю не интересны пользователи, чьи имена начинаются на "Art". Его больше интерисуют те, чьи имена начинаются на "%WAZZZZUP". Этот текст я и ввожу в программу. А что она ищет? Ищет полный бред - выдаст всех пользователей, у которых в имени есть "WAZZUP". В результате клиенты несут убытки из-за непредсказуемо работающего ПО, компания-разрабочтик выплачивает огромные неустойки.
Что же делать?
А делать нужно совсем немного - всего лишь несколько замен символов:
[ [[]
% [%]
_ [_]
Вот, собственно, и все.
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 19.03.07 17:18
У меня интерисуются, зачем помимо "%" заменять другие символы.
% - произвольная строка из 0 или более символов
_ - один произвольным символ
[ и ] используются подобно тому как они используются в регулярных выражениях:
[a-z], [abcdf], [^e-x]
Заменяем только "[". "]" и "^" не трогаем, так как если открывающей квадратной скобки нет (она заменена ескейпом), то дальнейшая конструкция уже не воспринимается как шаблон.
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 19.03.07 22:08
сам с собой?
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 19.03.07 23:30
Нет, конечно.
Мне спросили по ICQ про назначение первого и последнего символов, видимо, постеснялись тут спрашивать