SQL-инъекция

Простыми словами

Если приложение превращает ввод пользователя в часть SQL-кода, злоумышленник может изменить смысл запроса: прочитать чужие данные, обойти проверку или выполнить опасную операцию.

Как применяется

Основная защита — параметризованные запросы, минимальные права учётной записи БД, безопасные ORM-паттерны, валидация и тесты; WAF используют как дополнительный слой.

Пример применения

Вместо строки `SELECT ... WHERE id=` с добавленным параметром разработчик использует prepared statement, где значение передаётся отдельно и не интерпретируется как SQL.

Не путать с

  • СравнениеXSS внедряет код в контекст браузера пользователя; SQL-инъекция изменяет запрос к базе данных на стороне сервера.

Как это работает

  1. Точка вводаПриложение получает параметр из формы, URL, заголовка или API.
  2. Небезопасная сборкаЗначение конкатенируется со строкой SQL без корректного связывания параметров.
  3. Изменение запросаСпециальные символы и операторы меняют условие или добавляют команду.
  4. ВоздействиеБаза выполняет изменённый запрос в пределах прав прикладной учётной записи.

Продолжить изучение

Частые вопросы

Экранирование достаточно?

Оно зависит от контекста и СУБД; предпочтительны параметризованные запросы и запрет динамического SQL.

ORM исключает SQL-инъекции?

Нет, если используются сырые запросы, небезопасная интерполяция или динамические части запроса.

Как проверить исправление?

Повторить исходный сценарий, добавить автоматический негативный тест и проверить минимальные права БД.

SQL-инъекция — внедрение фрагмента SQL в запрос приложения из-за небезопасного объединения пользовательских данных с командой базы данных.