ТЕХНИЧЕСКИЕ НАУКИ
УДК 347.1
Аканов Т.Т.
Магистрант кафедры Информатики и информационной безопасности ЕНУ им. Л.Н. Гумилева
(Казахстан)
БЕЗОПАСНОСТЬ САЙТОВ: SQL - ИНЪЕКЦИЯ
Аннотация: данная работа представляет собой обзор существующих методов определения SQL-инъекций, рассмотрение причин возникновения. На основе рассмотренного материала предлагаются методы по защите информаци на уровне ввода данных в текстовые формы.
Ключевые слова: информация, безопасность, SQL, SQL-инъекция, защита информации.
Веб-сайты обращаются к структурированной информации, которая размещена в базах данных. Пользователи взаимодействуют с данными через формы для ввода и отображения информации. Например, при аутентификации вводится логин и пароль, критерии проверяются на сервере. В базе данных находится информация о пользователях и определен уровень доступа. Иногда разработчики сайта не учитывают ситуацию, что в поле ввода информации, возможно, помещен текст, который нарушит работу сервера. Сервер обрабатывает полученные данные как заданную команду. Этой уязвимостью может воспользоваться злоумышленник, например, получив аутентификационные данные пользователя с правами администратора,— такая проблема получила название SQL-инъекции. После ввода логина и пароля, данные из текстовой формы передаются на сервер и подставляются в запрос, представленный следующим образом: select * from Users where
logm='username' AND password= 'pass', где username и pass — введенный текст в поле данных на сайте.
Приложение авторизует пользователя в том случае, если пара логин и пароль будут определены в базе пользователей. Но, заменив username на фразу "admin' --", итоговый запрос подменит начальную команду: select * from Users where login='admin\' -- ' AND password= 'pass'.
И при наличии пользователя с именем admin сайт позволит работать под его учетной записью без проверки пароля. База проигнорирует всю оставшуюся команду, стоящую после двух черточек "--", потому что в синтаксисе SQL так обозначается комментарий. Символ ";" отделяет одну команду SQL от другой, поэтому возможно выполнение нескольких команд.
Рассмотрим варианты некорректных запросов, которые вызывают уязвимость к SQL-инъекциям в работе базы данных.
Такие уязвимости возникают по следующим причинам:
- Динамическое построение SQL-запросов. Самый простой вариант для программиста — подставлять без дополнительной фильтрации введенные пользователем данные в готовую конструкцию запроса.
- Некорректная обработка исключений. При попытке отправки SQLкоманды, содержащей ошибку, SQL-сервер отправит обратно пользователю информацию о ней. Злоумышленник, ориентируясь по этим сообщениям, вводит правильную команду.
- Некорректная обработка специальных символов. В базе данных MySQL, например, комментарий задается с помощью символов "--" или "#" [3]. Потому приложение должно обрабатывать такие символы.
- Некорректная обработка типов. При обработке символа апострофа (') закрывается уязвимость текстовых данных. Однако в числовых
типах проблема остается. У злоумышленника есть возможность добавить команду.
С помощью union к исходному запросу присоединится еще одна таблица, в данном случае с названием users.
С точки зрения программирования, задача защиты сервера от SQL- инъекций решаема. Администратор должен помнить об этой уязвимости и предпринять правильные меры по защите.
SQL-инъекция является распространенной и разрушающей уязвимостью, поэтому важно защитить приложение и сервер от данных атак.
Прежде всего необходима фильтрация поступающих данных. Фильтрация происходит на сервере, так как из приложения возможен перехват и изменение информации.
Специальные символы текстовой информации, например, апостроф (') или косая черта (/), должны дополняться символом косой черты (/). Например, если в поле username будет значение «Д'Артаньян», то в базу данных будет записано значение «Д/'Артаньян», и ошибок не возникнет.
Для проверки численной информации пользуются проверкой типа. Сервер вернет корректную ошибку пользователю, который в числовое поле поместит текст.
В приложении рекомендуется ограничивать количество символов для ввода информации, а на сервере — проверять ее. При переполнении поля запрос отклоняется.
Рекомендуется также отключить вывод ошибок от SQL-сервера, тогда злоумышленнику придется «вслепую» угадывать команды. Рекомендуется произвести настройку прав пользователей базы данных, с ограничением прав учетной записи сервера.
SQL-инъекции приводят к проблемам в работе веб-сайтов. Важно не допускать несанкционированного доступа к конфиденциальным данным, корректно обрабатывая входящую информацию. Закрытие уязвимостей от SQL-инъекций является важной задачей по обеспечению информационной безопасности и корректной работе веб-приложений. Данные проблемы решаемы с помощью инструментов программирования, пример решения рассмотрен в статье.
Список литературы:
1. Jones M. Fight against SQL injection attacks [Электронный ресурс] // IBM. Режим доступа: https://www.ibm.com/developerworks/security/library/se- sqlinjection-attacks/index. html.
2. Егоров М. Выявление и эксплуатация SQL-инъекций в приложениях // Защита информации. INSIDE. 2011. № 2. С. 2-8.
3. Евтеев Д. SQL Injection от А до Я [Электронный ресурс] // Режим доступа: https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/PT-devteev- AdvancedSQL-Injection.pdf.
4. Бирюков А.А. Информационная безопасность: защита и нападение. М. : ДМК Пресс, 2012. 474 с.