Советы по избеганию SQL внедрения
Практически каждая база данных имеет средства для безопасной установки и безопасного хранения данных. Инициализировав данные службы, можно защитить базу данных от взломов с использованием внедрения SQL-инструкций на уровне приложения.
Правильная обработка ошибок
Никогда нельзя позволять приложению отсылать пользователю сообщения об ошибках механизма ODBC или любых других ошибках. Используйте генерацию страниц, описывающих причину ошибки, но ни в коем случае не предоставляйте пользователю системную информацию, имена переменных или другие данные. В языке Java, например, для обработки ошибок очень удобным будет использование методов try, catch, finally.
Список параметров
Данные, относящиеся к пользователю, необходимо помешать в специальные переменные. Объединение строк представляет серьезную угрозу для безопасности SQL-выражений, поскольку обеспечивает пользователю простой способ манипулирования выражением с помощью добавления кавычек.
Проверка правильности ввода должна осуществляться на Web-сервере, а базе данных должны передаваться только данные со строго заданными параметрами. Поля, в которые пользователь осуществляет ввод только численных данных, должны иметь тип только INT и ни в коем случае не VARCHAR.
Хранимые процедуры
Хотя и нельзя утверждать со 100 %-ной уверенностью, но хранимые процедуры, которые были определены пользователем, менее подвержены опасности взлома с использованием внедрения SQL. Они требуют строго определенного количества параметров, в строго определенной последовательности и в строго определенном формате. Эти жесткие требования значительно уменьшают риск взлома данной процедуры. Кроме того, использование хранимых процедур повышает не только уровень безопасности приложения, но также улучшает его характеристики при использовании!
Выполнение с минимальными привилегиями
Все приложения, работающие с базами данных, должны выполняться в условиях минимальных привилегий. Также учетная запись пользователя, которую использует Web-сервер, должна иметь ограниченные возможности. Это не означает, что приложение не может производить запись и чтение из базы данных, однако данное приложение не должно иметь прав выполнения записи в главную базу данных или прав выполнения резервного копирования базы данных.
Защита схемы
Имена таблиц, имена столбцов и SQL-структуры не должны размещаться в HTML-тексте. Часто встречаются страницы, на которых разработчики помещают объявление всей таблицы между HTML-дескрипторами комментария. Конечно же, эти действия облегчают понимание страниц, однако комментарии все же лучше помещать между ASP-дескрипторами комментария (ASP.NET), которые может просматривать только разработчик, чтобы пользователь не имел к ним доступа.
Методика внедрения SQL-инструкций:
- Для проверки приложения на наличие проверки вводимых данных необходимо создавать условия, при которых на странице происходят ошибки.
- Продолжайте вводить недопустимые данные, пока не определите всю структуру SQL-выражения или не найдете корректно обрабатываемую комбинацию символов.
- Соберите с помощью SQL-запросов всю возможную информацию о приложениях, работающих с базой данных.
- Соберите с помощью SQL-запросов всю возможную информацию о системе, в которой находится база данных.
На выполнение пп. 1 и 2 может уйти много времени. Но как только определится корректный формат SQL-запроса, сразу же появится возможность выполнить SQL-выражение. Наиболее важным является п. 2. На этом этапе используются символы кавычек, точки с запятой и тире.
Твитнуть
Спасибо за советы автору респект!