Дан HTML-формуляр, принимающий параметр name, и PHP-код: $sql = "SELECT * FROM users WHERE name = '$_POST[name]'"; объясните механизм SQL-инъекции с примером полезной нагрузки, последствия для конфиденциальности и целостности данных и опишите комплекс мер защиты (подготовленные выражения, валидация, привилегии)

26 Мая в 10:27
11 +1
0
Ответы
1
Кратко — как это работает, пример полезной нагрузки, последствия и защита.
1) Механизм SQL‑инъекции
- Проблема: в коде строка формируется конкатенацией пользовательского ввода без защиты:
$sql = "SELECT * FROM users WHERE name = '$_POST[name]'";
атакующий может включить в поле `name` SQL‑синтаксис (закрыть кавычку, добавить логическое выражение или дополнительные запросы), изменив смысл всего запроса.
- Пример полезной нагрузки (в значение POST name вставляют):
' OR '1'='1' --
В результате строка станет:
SELECT * FROM users WHERE name = '' OR '1'='1' -- '
Здесь логика превращается в всегда истинную (замените `'1'='1'` на ′1′=′1′'1'='1'1=1), и запрос вернёт все строки или позволит обход проверки аутентификации. При поддержке множественных запросов можно попытаться выполнить что‑то вроде:
'; DROP TABLE users; --
(успех зависит от настроек СУБД).
2) Последствия для конфиденциальности и целостности данных
- Конфиденциальность: утечка всех данных таблицы (пользователи, пароли, личные данные), получение доступа к защищённым данным.
- Целостность: изменение/удаление записей (UPDATE, DELETE, DROP), подмена данных.
- Аутентификация/авторизация: обход логина, получение административного доступа.
- Дополнительно: выполнение администр. команд при поддержке многозапросности, внедрение бекдоров, нарушение соответствия (GDPR, PCI DSS), репутационные и финансовые потери.
3) Комплекс мер защиты (кратко и по приоритету)
- Подготовленные выражения / параметризация (обязательно): привязывайте значения как параметры, не встраивайте строку вручную. Пример PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $_POST['name']]);
$row = $stmt->fetch();
Параметры гарантированно экранируются СУБД и нарушают синтаксис инъекции.
- Валидация и фильтрация входа: применяйте белые списки (разрешённые символы, длина), проверяйте формат и длину до отправки в БД; отклоняйте явно недопустимые данные. (Whitelist > blacklist.)
- Минимизация привилегий: учетная запись БД для приложения должна иметь только нужные права (например, только SELECT/INSERT/UPDATE на конкретные таблицы; не давать DROP/ALTER если не требуется).
- Отключение многозапросов, если не нужны: запретите выполнение нескольких команд в одном запросе (mysqli::multi_query и т.п.), чтобы усложнить выполнение вредоносных дополнительных операторов.
- Экранирование и библиотеки: если параметризация невозможна, используйте безопасные фасады/экранирующие функции СУБД (последний вариант).
- Жёсткая обработка ошибок: не выводить подробные ошибки SQL пользователю; логировать их для админов.
- Дополнительно: WAF/IDS, регулярные тесты на уязвимости (SAST/DAST/pentest), хранение чувствительных полей в хешах/шифровании, мониторинг и аудит запросов.
Резюме: правильно использовать параметризованные запросы + валидацию входа + принцип наименьших привилегий — это базовый и эффективный комплекс защиты от SQL‑инъекций.
26 Мая в 11:36
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир