Уязвимости

SQL-инъекция, утечка персональных данных и ответственность оператора

Самая дешёвая для атакующего дорога к базе клиентов — уязвимый параметр в адресной строке. Разбираем, как инъекция превращается в утечку, во сколько это обходится по новым составам КоАП и как проверить, есть ли она у вас.

SQL-инъекция — это возможность подмешать собственную команду в запрос приложения к базе данных. Если приложение имеет доступ к таблице клиентов, атакующий получает тот же доступ: выгрузка базы занимает минуты и выполняется автоматизированным инструментом. Для оператора персональных данных это прямая дорога к составам частей 12–14 статьи 13.11 КоАП — от 3 до 15 млн ₽ за инцидент.

Как из инъекции получается утечка

Уязвимость возникает там, где данные из адресной строки или формы попадают в SQL-запрос через склейку строк. Приложение ожидает, что в параметре придёт число или слово, а получает фрагмент, который меняет смысл запроса целиком.

Дальше сценарий разворачивается по накатанной: атакующий определяет структуру базы, находит таблицу с пользователями, выгружает её постранично. Никакой изобретательности на этом этапе не требуется — работу делает готовый инструмент, а роль человека сводится к выбору цели. Поэтому массовые утечки редко бывают «целевыми атаками»: чаще это сканирование всего подряд и сбор того, что открылось.

Почему это не только про старые сайты

Инъекции регулярно находятся в свежих проектах — в местах, куда не дотянулся ORM: ручные отчёты и выгрузки, поиск с динамической сортировкой, фильтры каталога, интеграционные эндпоинты и админские инструменты, написанные «на скорую руку». Фреймворк защищает типовой путь, а утечка происходит на нетиповом.

Разновидности, которые важно различать

Тип Как проявляется Чем опасен для данных
Ошибочная (error-based) Приложение возвращает текст ошибки СУБД Быстрая разведка структуры базы, самая простая эксплуатация
Объединяющая (UNION-based) Ответ страницы содержит подмешанные данные из другой таблицы Прямая выгрузка содержимого таблиц в интерфейс сайта
Слепая логическая (boolean-blind) Страница отвечает по-разному на истинное и ложное условие Данные извлекаются побитово; медленнее, но так же полно
Слепая временная (time-based) Ответ приходит с управляемой задержкой Работает даже когда страница внешне не меняется вообще

Различать их важно по одной практической причине: простые сканеры уверенно находят первые два типа и почти слепы к слепым. Если проверка сайта ограничилась поиском текста ошибки СУБД в ответе, отсутствие находок не означает отсутствия уязвимости.

Почему WAF не закрывает вопрос

Межсетевой экран уровня приложения отсекает типовые нагрузки и заметно снижает шум. Но он анализирует форму запроса, а не смысл кода, поэтому обходится кодированием, разбиением на части, нестандартным синтаксисом конкретной СУБД или работой через параметр, который WAF не разбирает. Плюс он не помогает, если запрос приходит по внутреннему каналу или через интеграцию.

Практический смысл WAF — выиграть время и сбить массовое сканирование. Практический смысл исправления в коде — убрать саму возможность. Первое без второго превращается в состояние «мы защищены, пока никто не постарается».

Ответственность оператора

С точки зрения закона неважно, какой техникой воспользовался атакующий. Важен результат: персональные данные вышли из-под контроля оператора. Отсюда цепочка:

Техническая причина
SQL-инъекция в параметре, права БД шире необходимого
Нарушенная норма
ст. 19 152-ФЗ — не приняты необходимые технические меры
Санкция
ч. 12–14 ст. 13.11 КоАП: 3–15 млн ₽ по числу пострадавших
Инцидент не заметили
Логи не велись, мониторинга нет
Нарушенная норма
Срок уведомления регулятора пропущен
Санкция
ч. 11 ст. 13.11 КоАП: 1–3 млн ₽ дополнительно
Утечка повторилась
Причину не устранили, закрыли только симптом
Квалификация
Повторное нарушение
Санкция
ч. 15: 1–3% выручки, не менее 20 млн ₽

Отдельная линия — уголовная: статья 272.1 УК РФ о незаконных использовании, передаче, сборе и хранении компьютерной информации, содержащей персональные данные, действует с 11 декабря 2024 года и применяется к физическим лицам.

Как проверить свой сайт

Проверка на инъекции — это динамическое тестирование: во все входные точки отправляются проверочные запросы, и анализируется реакция приложения. Качество проверки определяется двумя вещами.

  • Полнота обхода. Сканер должен добраться до параметров, а не остановиться на главной странице. Формы, фильтры, поиск, пагинация, эндпоинты за JavaScript-навигацией — всё это точки входа.
  • Подтверждение находки. «Возможна SQL-инъекция» — это гипотеза. Полезный результат выглядит иначе: приложен запрос, показана разница в поведении (управляемая задержка, различие ответов на истинное и ложное условие, ошибка СУБД) и указано, что именно доступно через эту точку.
Про ложные срабатывания

Отчёт из пятисот «потенциальных» находок бесполезен: разработчик перестаёт их читать после десятой. Смысл имеет разделение на подтверждённые (воспроизводимые) и требующие проверки. У нас подтверждение делает отдельный слой-оракул, а не языковая модель: SQL-инъекция считается подтверждённой, если воспроизводится сигнатура или управляемая задержка, XSS — если код реально исполнился в браузере.

Как исправляют

  1. Параметризованные запросы. Данные передаются отдельно от текста запроса — подмешать команду становится нечем. Это единственное системное решение.
  2. ORM вместо ручной склейки везде, где это возможно; ручной SQL — только осознанно и с параметрами.
  3. Минимальные права пользователя БД. Приложению редко нужны права на чтение всех таблиц и на изменение схемы. Урезание прав ограничивает ущерб, даже если инъекция найдётся.
  4. Проверка логов задним числом. Найденная сегодня инъекция могла эксплуатироваться месяцами. Если следы есть — это уже инцидент со сроком уведомления в 24 часа, а не просто уязвимость.
  5. Повторная проверка после исправления. Фикс, который не проверили, регулярно оказывается неполным: закрыли один параметр, забыли соседний.

Sources

  1. OWASP Top 10: A03 Injection
  2. CWE-89: SQL Injection
  3. КоАП РФ, статья 13.11 — КонсультантПлюс

FAQ

Может ли одна SQL-инъекция привести к утечке всей базы?
Да, и это типичный сценарий. Инъекция в одном параметре даёт возможность выполнять запросы к базе от имени приложения. Если у пользователя БД, под которым работает сайт, есть доступ к таблице клиентов, атакующий выгружает её целиком — обычно автоматизированным инструментом, без ручной работы. Именно поэтому права доступа приложения к базе стоит урезать до минимально необходимых.
Защищает ли WAF от SQL-инъекции?
Частично. WAF отсекает типовые полезные нагрузки и шумных сканеров, но обходится кодированием, разбиением запроса, нестандартным синтаксисом СУБД или атакой через параметр, который WAF не разбирает. WAF — компенсирующая мера, снижающая шум и скорость атаки, а не замена исправлению в коде.
Под какую ответственность попадает оператор, если через инъекцию утекли данные?
По административной линии — статья 13.11 КоАП: 3–5 млн ₽ при утечке данных 1–10 тысяч субъектов, 5–10 млн при 10–100 тысячах, 10–15 млн при более чем 100 тысячах; повторная утечка — 1–3% годовой выручки, но не менее 20 млн ₽. Отдельно — 1–3 млн ₽ за неуведомление Роскомнадзора об инциденте в установленный срок. Кроме того, невыполнение технических мер по ст. 19 152-ФЗ рассматривается как самостоятельное нарушение.
Как понять, есть ли SQL-инъекция на моём сайте?
Надёжный способ — динамическое тестирование: сканер отправляет проверочные запросы во все входные точки и смотрит на реакцию приложения. Важно отличать «сканер что-то заподозрил» от подтверждённой уязвимости: качественная проверка воспроизводит поведение (разница в ответах, управляемая задержка, ошибка СУБД) и прикладывает запрос, который это доказывает.
Что делать, если инъекция найдена?
Закрыть параметризованными запросами или ORM вместо конкатенации строк, урезать права пользователя БД, проверить логи на предмет уже случившейся эксплуатации и — если следы есть — запускать процедуру инцидента с уведомлением Роскомнадзора в течение 24 часов. Ретроспективный анализ логов важен: инъекция могла эксплуатироваться до того, как вы её нашли.
EverWatch

Проверить, есть ли эти дыры на вашем сайте

Внешний аудит без доступа к коду и без агентов на сервере: 6 сканеров ищут уязвимости, найденные SQL-инъекции и XSS подтверждаются оракулом (не «возможно, уязвимо», а воспроизводимый факт), каждая находка привязана к статье закона и диапазону штрафа.

Оставить заявку на аудит Посмотреть пример отчёта

Нужен только документальный минимум? Бесплатная проверка сайта по 152-ФЗ — 5 проверок, результат за минуту.

Read next

Штрафы и ответственность
Оборотные штрафы за утечку персональных данных: когда 1–3% выручки и как этого не допустить
С 30 мая 2025 года повторная утечка стоит 1–3% годовой выручки — минимум 20 млн ₽, максимум 500 млн ₽. Разбираем, как считается сумма, за что штрафуют отдельно и почему «мы поставили галочку в политике» больше не работает.
27.07.2026 11 мин чтения
Требования закона
Статья 19 152-ФЗ: какие технические меры защиты обязан принять оператор
Политика и согласия закрывают «бумажные» составы на сотни тысяч рублей. Статья 19 — про другое: технические меры, невыполнение которых всплывает при утечке и стоит миллионы. Разбираем, что конкретно требуется и что из этого проверяется снаружи.
27.07.2026 10 мин чтения