Автор: Лещев Сергей Сергеевич
Преподаватель ГАПОУ СО «Поволжский Колледж технологий и менеджмента»
SQL- инъекции.
Лекция №9. SQL- инъекции.
Цели занятия:
- Образовательная: Сформировать понятие студентов о дисциплине, ее роли в профессиональной деятельности, а также дать основные ее понятия.
- Развивающая: развить навыки самостоятельной работы.
- Воспитательная: воспитывать умение самостоятельно мыслить.
- Методическая: повысить эффективность учебного процесса, обобщение и систематизация учебного материала, раскрытие сущности изучаемых понятий и закономерностей на основе фактического материала.
SQL инъекция — это атака, которая задействует динамические операторы SQL, вынося в комментарии определенные части инструкций или добавляя условие, которое всегда будет истинным. Она нацелена на дыры в архитектуре веб-приложений и использует операторы SQL для выполнения вредоносного SQL-кода.
Как работает SQL-инъекциях
Типы атак, которые могут быть выполнены с использованием SQL-инъекции, различаются по типу поражаемых механизмов базы данных. Атака нацеливается на динамические операторы SQL. Динамический оператор — это оператор, который создается во время выполнения на основе параметров из веб-формы или строки запроса URI.
Рассмотрим простое веб-приложение с формой входа. Код HTML-формы приведен ниже:
<form action=‘index.php’ method=»post»>
<input type=»email» name=»email» required=»required»/>
<input type=»password» name=»password»/>
<input type=»checkbox» name=»remember_me» value=»Remember me»/>
<input type=»submit» value=»Submit»/>
</form>
Здесь:
- Форма принимает адрес электронной почты, а затем пароль отправляется в файл PHP с именем index.php;
- Сессия хранится в файле cookie. Эта возможность активируется при установке флажка remember_me. Для отправки данных используется метод post. Это означает, что значения не отображаются в URL-адресе.
Предположим, что запрос для проверки идентификатора пользователя на стороне сервера выглядит следующим образом:
SELECT * FROM users WHERE email = $_POST[’email’] AND password = md5($_POST[‘password’]);
Здесь:
- Запрос использует значения массива $ _POST[] напрямую, не санируя его;
- Пароль шифруется с использованием алгоритма MD5.
Другие типы атак с использованием SQL-инъекций
SQL-инъекции могут нанести гораздо больший ущерб, чем вход в систему в обход механизма авторизации. Некоторые из таких атак могут:
- Выполнить удаление данных;
- Выполнить обновление данных;
- Выполнить добавление данных;
- Выполнить на сервере команды, которые будут загружать и устанавливать вредоносные программы;
- Выполнить экспорт на удаленный сервер злоумышленника ценных данных, таких как реквизиты кредитной карты, электронная почта и пароли.
Приведенный выше список не является полным. Он просто дает представление о том, какую опасность представляют SQL-инъекции.
Инструменты для автоматизации SQL-инъекций
В приведенном выше примере мы использовали методы ручной атаки. Перед тем, как сделать SQL инъекцию, нужно понимать, что существуют автоматизированные инструменты, которые позволяют выполнять атаки эффективнее и быстрее:
SQLSmack;
SQLPing 2;
SQLMap.
Как предотвратить SQL-инъекции
Вот несколько простых правил, которые позволят защититься от атак с использованием SQL-инъекций:
Ввод пользовательских данных не должен быть доверенным. Его всегда нужно санировать, прежде чем данные будут использоваться в динамических операциях SQL.
Хранимые процедуры — они могут инкапсулировать SQL-запросы и обрабатывать все входные данные в качестве параметров.
Подготовленные запросы — сначала создаются запросы, а затем все предоставленные пользовательские данные обрабатываются в качестве параметров. Это не влияет на синтаксис инструкции SQL.
Регулярные выражения — могут быть использованы для обнаружения потенциально вредоносного кода и его удаления перед выполнением операторов SQL.
Права доступа на подключение к базе данных – чтобы защититься от SQL инъекций, учетным записям, которые используются для подключения к базе данных, должны предоставляться только необходимые права доступа. Это поможет ограничить действия, которые SQL-операторы могут выполнять на сервере.
Сообщения об ошибках — не должны раскрывать конфиденциальную информацию. Простые пользовательские сообщения об ошибках, такие как «Извините, возникла техническая ошибка. Служба поддержки уже уведомлена о ней. Повторите попытку позже», можно использовать вместо отображения запросов SQL, вызвавших ошибку.
Заключение
- SQL инъекции — это тип атак, который задействует ненадежные запросы SQL;
- SQL-инъекции могут использоваться для обхода алгоритмов авторизации, извлечения, вставки, обновления и удаления данных;
- Перечень инструментов для SQL-инъекций включает в себя SQLMap, SQLPing и SQLSmack и другие;
- Продуманная политика безопасности при написании запросов поможет защититься от атаки с использованием SQL-инъекций.
