SQL инъекция

Критическая уязвимость кода сайта. Максимальный уровень угрозы.

SQL инъекция - внедрение произвольного кода в SQL запрос

SQL инъекция является максимальной угрозой класса А1 по классификации OWASP


Внедрение SQL кода - это один из распространённых способов взлома сайтов и веб приложений, работающих с базами данных.

SQL - инъекция является одной из самых опасных уязвимостей.
Возможность успешной эксплуатации SQL - инъекции на сайте, в 99% случаев приводит к взлому ресурса.
В случае успешной эксплуатации уязвимости, атакующий получает полный доступ к базе данных, где хранятся учетные данные пользователей и администраторов ресурса. Соответственно в базе данных хранятся пароли к административной панели сайта, почтовым сервисам и т.д.
Кроме этого, используя SQL инъекцию, злоумышленник может загрузить шелл или любой другой скрипт на сервер атакуемого сайта.

SQL - injection представляет собой подделку определённого запроса к базе данных сайта. В случае успеха атакующий может изменяет логику выполнения SQL запроса, и получает доступ к "закрытым данным", а именно, учетным данным доступа и т.д.
SQL инъекция часто эксплуатируется не только для взлома сайта, но и для хищения конфиденциальных данных.
В качестве примера можно взять случаи, когда одна организация "интересуется" клиентской базой конкурента, а данные по клиентам хранятся в БД сайта.

На примитивном уровне, эксплуатация SQL инъекции выглядит следующим образом:

  • Атакующий изменяет запрос, нарушая логику его выполнения
  • Вызывает ошибку синтаксиса SQL запроса
  • Внедряет свой запрос, эксплуатируя SQL инъекцию
  • Получает учетные данные доступа к сайту из базы данных

Эксплуатация SQL инъекций, в зависимости от типа используемой БД и условий внедрения, позволяет атакующему выполнить произвольный запрос к базе данных и в результате прочитать содержимое любых таблиц БД сайта (в том числе содержащие имена и пароли администраторов, зарегистрированных пользователей сайта), удалить, изменить или добавить данные, получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

В большинстве случаев, такой взлом сайта может достаточно долго оставаться незамеченным для владельца и администратора сайта.
Атакующий может разместить на сайте веб-шеллы и эксплуатировать захваченный сайт в своих целях, не привлекая внимания его администратора

Чаще всего SQL - инъекция становиться возможной из-за некорректной обработки входных данных, используемых в SQL - запросах.


Защита от SQL инъекций

Фильтрация параметров, работающих с базой данных

Проверка валидности числовых параметров. В PHP можно использовать функцию is_numeric(n); для проверки параметра.
Проверка валидности строковых параметров.
Экранизация символов. В PHP можно использовать функции addslashes($str); и mysql_real_escape_string($str);.

Разработчики сайтов, работающих с базами данных, должен знать о таких уязвимостях и принимать меры противодействия внедрению SQL кода.



Сканер уязвимостей сайтов онлайн Проверьте, наколько устойчив к взлому Ваш сайт