Когда пользовательский ввод становится командой. OWASP A05: Injection
• Инъекции — это класс уязвимостей, при котором приложение передаёт пользовательский ввод интерпретатору так, будто он является частью команды, запроса или кода.
• В OWASP Top 10:2025 Injection занимает пятое место. Категория включает SQL-инъекции, XSS, командные инъекции, NoSQL-, LDAP- и другие виды атак.
• Представим, что сайт ищет пользователя по ID. Разработчик формирует SQL-запрос, просто склеивая строку с введённым значением:
SELECT * FROM users WHERE id = 'ВВОД_ПОЛЬЗОВАТЕЛЯ'
• Если приложение не отделяет данные от структуры запроса, введённый текст может изменить его логику. В итоге вместо поиска одного пользователя сервер обработает уже совсем другой запрос, например:
SELECT * FROM users WHERE id = 'ВВОД_ПОЛЬЗОВАТЕЛЯ' OR 1=1--' AND released = 1
• Проблема работает не только с базами данных, если данные напрямую подставляются в команду ОС, шаблон страницы, LDAP-запрос или HTML-код, у каждой среды есть свой вариант инъекции.
• Основные последствия:
• Чтение, изменение или удаление данных из БД
• Обход ограничений и аутентификации
• Выполнение команд на сервере
• Кража сессий через XSS
• Доступ к внутренним сервисам и каталогам
• Главная ошибка это считать, что проверка пары "опасных символов" решает проблему. Фильтры легко сделать неполными, а у разных интерпретаторов разные правила обработки строк.
• Важная мысль: данные должны оставаться данными, а команды — командами. Как только приложение смешивает их в одной строке, пользователь получает шанс повлиять не только на содержимое запроса, но и на его смысл.
• В прошлых постах я отдельно уже разбирал SQL Injection и XSS. Удачи!
• Поддержать автора монеткой: @v_meshke
