Дан SQL-запрос в веб-приложении: "SELECT * FROM users WHERE name = '" + name + "';" Опишите уязвимость, способы её эксплуатации и методы защиты на уровне кода и базы данных

15 Янв в 13:08
10 +1
0
Ответы
1
Кратко: это SQL-инъекция — внедрение произвольного SQL из входной переменной в строку запроса.
Что происходит
- Уязвимый код: "SELECT * FROM users WHERE name = '" + name + "';"
- Если attacker передаёт, например, name = "' OR '1'='1", итоговый SQL станет:
"SELECT * FROM users WHERE name = '' OR ' 111 '=' 111 ';"
— запрос вернёт все записи (аутентификация обходится, данные вытягиваются и т.д.).
Способы эксплуатации (коротко)
- Обход аутентификации: name = "' OR ' 111 '=' 111 -- "
- Получение дополнительных столбцов/таблиц: использование UNION, например:
name = "' UNION SELECT password FROM admin -- "
- Извлечение по побитовым/постепенным запросам (blind): проверять побайтно через условия и читать по символам.
- Временные атаки (time-based): заставить БД задержать ответ, чтобы извлечь бит информации, например в MySQL: "… AND IF(substr((SELECT password FROM users WHERE id=1),1,1)='a', SLEEP(555), 0) --"
- Выполнение дополнительных команд (если разрешены множественные инструкции) — удаление/модификация данных.
Защита на уровне кода (обязательные меры)
1) Параметризованные запросы / подготовленные выражения (prepared statements). Пример (Node/PHP/Python — общая идея):
- Небезопасно: строковая конкатенация запроса.
- Безопасно: использовать placeholder и передавать значения отдельно — драйвер сам экранирует.
2) Белый список и валидация: если поле принимает ограниченный набор значений — проверять соответствие (регулярные выражения, длина).
3) Не доверять клиенту: избегать динамического составления SQL из пользовательских данных; если нужно — тщательно валидировать/экранировать.
4) Ограничение вывода ошибок: не показывать детальные сообщения БД пользователю.
5) Лимитирование запросов и логирование подозрительных паттернов.
Защита на уровне базы данных / инфраструктуры
1) Минимизация привилегий: приложение использует учетную запись с минимально необходимыми правами (например, только SELECT на нужные таблицы; без DROP/DELETE/GRANT).
2) Отдельные учётные записи для разных частей приложения (чтение/запись/админ).
3) Запрет многозапросных выражений в драйвере (multiStatements = false), если поддерживается.
4) Использование хранимых процедур с параметрами (но сами процедуры должны быть безопасны).
5) WAF/IDS и ограничение доступа по сети, мониторинг аномалий и логирование медленных/нестандартных запросов.
6) Обновление СУБД и драйверов, чтобы закрыть известные уязвимости.
Резюме
- Главная защита — параметризованные запросы + валидация входа + принцип минимальных привилегий. Защита должна быть многослойной (code + DB + сеть + мониторинг).
15 Янв в 13:15
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир