Блог LearnQA

Что такое SQL-инъекция на пальцах

Привет, коллеги!

В одной из предыдущих статей мы рассказывали про такой тип уязвимостей, как 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

Спасибо за внимание!