Главная / База знаний / Словарь терминов / SQL-инъекция: чем опасна и как закрыть

SQL-инъекция: чем опасна и как закрыть

Словарь терминов 3 мин чтения Обновлено 27.07.2026
Как чужой текст превращается в команду к базе данных, что при этом можно потерять и почему подготовленные выражения решают проблему, а экранирование строк — нет.

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

Аналогия для владельца сайта

Есть архив и бланк: «принесите дело номер ___». Если в графу с номером кто-то допишет «…а заодно вынесите весь шкаф и оставьте дверь открытой», а сотрудник прочитает бланк целиком как поручение — он это сделает. Уязвим не архив, а привычка склеивать поручение из чужого текста. Решение — форма, где номер дела всегда остаётся номером и никогда не читается как команда.

Что при этом можно потерять

Что происходитЧем оборачивается
Чтение чужих таблицУтечка базы клиентов и заказов — а с ней уведомления людям и вопросы регулятора
Доступ к учётным записямХэши паролей администраторов, вход в админку, контроль над сайтом
Запись постороннего кода в базуЗаражение, которое возвращается даже после чистки файлов — см. вредоносный код на сайте

Как это бьёт по SEO

Прямого фактора ранжирования здесь нет — бьёт последствие. Через инъекцию в базу заливают спам-контент и скрытые ссылки на чужие темы. Дальше типовой сценарий: поиск переоценивает тематику сайта, позиции проседают, часть страниц выпадает из индекса, а при попадании домена в базы небезопасных сайтов браузеры показывают предупреждение и трафик обрывается.

Как это выглядит в отчёте Security Shield

Сканер отправляет один безобидный пробный запрос к найденным параметрам и смотрит, не вернёт ли сайт текст ошибки базы данных. Если вернул — появляется находка «Признак SQL-инъекции (ошибка БД)»: высокая серьёзность, класс CWE-89, категория OWASP A03:2021. В доказательстве виден фрагмент ошибки, а пометка «требует проверки» означает, что сервис фиксирует симптом, а не взламывает базу.

Проба выполняется только в платных режимах и на подтверждённом домене. Сканер смотрит снаружи и видит лишь те параметры, которые нашёл на страницах, — отсутствие находки не означает, что инъекций нет нигде. Что именно проверяется — в статье про Security Shield.

Высокая серьёзность — значит, в работу сразу

Ошибка базы в ответе означает, что чужой текст дошёл до запроса. Передайте разработчику адрес страницы и имя параметра из отчёта. Ручное экранирование кавычек и «чёрные списки» слов тут не решение.

Как закрыть

  1. Параметризованные запросы. Главное решение: текст запроса задаётся заранее, а значения передаются отдельно — подготовленным выражением. Тогда содержимое поля физически не может стать частью команды.
  2. ORM или запросный слой фреймворка. Современные библиотеки делают это по умолчанию; проблемы возникают там, где запрос собрали строкой вручную.
  3. Минимальные права пользователя базы. Учётной записи сайта почти никогда не нужны права на удаление таблиц и работу с файлами.
  4. Скройте технические ошибки от посетителя — отладочный вывод должен уходить в лог, а не на страницу.
  5. Обновите CMS и расширения. На типовых сайтах инъекция чаще приходит с уязвимым плагином, чем из вашего кода.

Как не допустить повторно

Договоритесь с разработчиком, что запросы, собранные конкатенацией строк, не проходят ревью. Файрвол перед сайтом — мера на время правки, а не замена подготовленным выражениям. После правки повторите глубокий скан. Полезно свериться и с аудитом сайта — он покажет посторонние страницы и ссылки, если что-то уже попало в базу.

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

Может ли SQL-инъекция быть, если сайт на популярной CMS?
Да, чаще всего она приходит не из ядра, а из стороннего плагина или темы. Поэтому обновления расширений закрывают этот риск не меньше, чем правки в собственном коде.
Помогает ли файрвол перед сайтом?
Он снижает поток попыток и полезен как временная мера, пока идёт правка. Уязвимость при этом остаётся, и обойти фильтр обычно проще, чем кажется.
Что делать первым делом при такой находке?
Передайте разработчику адрес страницы и имя параметра из отчёта и переведите этот запрос на подготовленное выражение. После правки повторите скан.
Попробуйте на своём проекте Всё, что описано в статье, доступно в кабинете — бонус при регистрации уже на балансе.
Открыть кабинет
Была ли статья полезна? Спасибо! Учтём при доработке.