Что такое SQL-инъекция
QA Andersen Team![](/file/9dcf283fa2638654dcbc6.png)
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-инъекцией.
Существует множество способов защитить базу данных от инъекций. Этим обычно занимаются разработчики. А задача тестировщика - проверить возможные места для атаки.