Инъекционные атаки — класс уязвимостей, при которых злоумышленник внедряет вредоносный код в запросы, интерпретируемые приложением или базой данных. Это первая строка в списке OWASP Top 10 — самом известном рейтинге веб-уязвимостей. Причина — недостаточная валидация и экранирование пользовательского ввода.
SQL-инъекция
Самый распространённый вид. Пример уязвимого кода:
SELECT * FROM users WHERE name = '" + userName + "'
Если передать в userName значение ' OR '1'='1, запрос вернёт все записи таблицы. Атаки позволяют: читать конфиденциальные данные, изменять или удалять записи, выполнять команды ОС (через xp_cmdshell в MSSQL). Защита: параметризованные запросы (prepared statements) — универсальный и надёжный метод. ORM-библиотеки делают это автоматически.
NoSQL, OS и LDAP инъекции
- NoSQL-инъекция — MongoDB-запрос с
$whereили$regexпозволяет обойти аутентификацию - OS Command Injection — вызов
system()илиexec()с пользовательским вводом. Вместо имени файла передаётсяfile.txt; rm -rf / - LDAP-инъекция — манипуляция поиском в каталоге Active Directory
- XXE (XML External Entity) — чтение файлов сервера через XML-процессор
Защита
Главные принципы защиты от инъекций: никогда не конкатенировать ввод пользователя в запросы, использовать параметризованные запросы и ORM, применять принцип минимальных привилегий для учётных записей БД, валидировать тип и формат входных данных, использовать WAF (Web Application Firewall) как дополнительный слой защиты.
