🤩SQL-инъекции: как происходят атаки и как от них защититься Что такое SQL-инъекция? SQLi — это уязвимость, при которой пользовательский ввод может повлиять на SQL-запрос приложения
Проблема возникает, когда введённые пользователем данные напрямую подставляются в SQL. В результате злоумышленник может попытаться получить доступ к данным, изменить или удалить их
🤩 Как происходит атака?
Представим форму авторизации. Приложение получает логин и подставляет его в SQL-запрос
Если ввод пользователя не обрабатывается безопасно, вместо обычного значения можно передать конструкцию, которая изменит логику исходного запроса
То есть главная проблема — смешивание пользовательских данных и SQL-кода Симптомы SQLi-атаки 🚨
Иногда атака никак себя не выдаёт, но возможны:
- необычно большое количество запросов
- ошибки базы данных
- странные сообщения или всплывающие окна
- подозрительные перенаправления
- неожиданные изменения данных
🤩 Типы SQL-инъекций In-band — результат атаки возвращается через тот же канал. Например, через ошибки или объединение запросов (UNION)
Blind SQLi — данные напрямую не возвращаются. Злоумышленник анализирует поведение системы: например, отличается ли ответ при разных условиях или меняется ли время ответа
Out-of-band — результат передаётся через другой канал, когда получить его обычным способом не получается
Как предотвратить? 🤩
Главные правила:
- использовать параметризованные запросы
- проверять и валидировать пользовательский ввод
- не собирать SQL через конкатенацию строк
- давать пользователям БД только необходимые права
- осторожно работать с динамическим SQL
- регулярно обновлять ПО и проверять приложение на уязвимости
- для веб-приложений дополнительно использовать WAF
👍 Главное, что стоит запомнить: пользовательский ввод должен оставаться данными, а не становиться частью SQL-кода