Что такое SQL-инъекция

Что такое SQL-инъекция

QA Andersen Team


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-инъекцией.


Существует множество способов защитить базу данных от инъекций. Этим обычно занимаются разработчики. А задача тестировщика - проверить возможные места для атаки.



Report Page