sql SQL-инъекции
Primary tabs
Forums:
SQL-инъекция — техника, при которой злоумышленник пользуется недостатками в коде приложения, который отвечает за построение динамических SQL-запросов.
Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.
Пример:
$id = $_GET['id']; $res = mysqli_query("SELECT * FROM news WHERE id_news = " . $id);
Если на сервер передан параметр id, равный 5 (например так: http://example.org/script.php?id=5), то выполнится следующий SQL-запрос:
SELECT * FROM news WHERE id_news = 5
Но если злоумышленник передаст в качестве параметра id строку "-1 OR 1=1" (например, так: http://example.org/script.php?id=-1+OR+1=1), то выполнится запрос:
SELECT * FROM news WHERE id_news = -1 OR 1=1
Таким образом, изменение входных параметров путём добавления в них конструкций языка SQL вызывает изменение в логике выполнения SQL-запроса.
Примеры возможных действий при наличии sql уязвимости: создание нового суперпользователя, получение данных с любыми привилегиями, измение/удаление данных, отображение структуры БД, в некоторых СУБД (например в MSSQL Server) можно получить доступ к операционной системе сервера базы данных.
Методы борьбы с SQL-инъекциями
- Использование подготовленных запросов
- Проверка данных на соответствие типу (например, целые числовые значения можно проверить функцией is_int())
- Проверка простых строк с ожидаемым набором символов (например имя, e-mail пользователя) регулярными выражениями
- Не выводить подробную информацию об ошибке в случае неудачной попытки sql-инъекции
Источники
- Log in to post comments
- 63 reads