В одной из предыдущих статей мы рассказывали про такой тип уязвимостей, как XSS. В этой же статье мы решили поговорить о том, что такое SQL-инъекция.
SQL-инъекция - это довольно популярный вид уязвимости, существующей на стороне сервера. Она возможна в случае, когда сервер для хранения информации использует базу данных на основе SQL: MySQL, PostgreSQL, MSSQL и т. д.
Суть уязвимости в следующем. Сервер может подставлять данные, которые пришли от пользователя, прямо в SQL запрос. Например (код на PHP):
$id = $REQUEST[‘id’];
$q = “select * from Users where id={$id}”;
Database::query($q);
Здесь id берется из запроса, который прислал клиент - веб-страница или мобильное приложение. Этот id становится частью SQL-запроса.
Ожидается, что от пользователя придет число в качестве id. Но технически пользователь может отправить любые данные. И злоумышленники этим пользуются.
Особенность SQL-движков в том, что они могут выполнять несколько запросов подряд. Для этого следует разделить запросы точкой с запятой.
Допустим, от пользователя придет id равный следующему значению:
5; drop table Users
Если подставить такой id без обработки в запрос выше, получится два запроса:
select * from Users where id=5; drop table Users
В итоге злоумышленнику удастся удалить таблицу Users. Подобным способом сформированный запрос и является SQL-инъекцией.
Существует множество способов защитить базу данных от инъекций. Этим обычно занимаются разработчики. А задача тестировщика - проверить возможные места для атаки.
Если вам интересно научиться находить SQL-инъекции и другие типы уязвимостей на вашем проекте, приходите на наш курс по тестированию безопасности - https://www.learnqa.ru/security
Спасибо за внимание!