Проанализируйте уязвимость SQL-инъекции в фрагменте PHP: "$query = \"SELECT * FROM users WHERE name='\".$_GET['name'].\"'\";" — объясните, почему это опасно, продемонстрируйте пример атаки и предложите безопасную реализацию

21 Ноя 2025 в 10:47
18 +1
0
Ответы
1
Почему опасно (кратко):
- В строке запрос формируется конкатенацией с внешним вводом ($_GET['name']). Злоумышленник может вставить SQL-код, который изменит структуру запроса — классическая SQL-инъекция.
Пример атаки:
- Полезная нагрузка в параметре:
name = ' OR 1=11=11=1 --
- URL (пример):
/page.php?name=%27%20OR%201%3D1%20--
- Получившийся запрос:
"SELECT * FROM users WHERE name=' ' OR 1=11=11=1 -- '"
(последняя кавычка превращается в комментарий из‑за `--`, условие 1=11=11=1 всегда истинно)
- Последствия: возвращаются все строки таблицы — обход проверок, утечка данных; возможны DELETE/INSERT/UPDATE, эскалация и т.д.
Безопасная реализация (рекомендуется: подготовленные выражения и связывание параметров)
- PDO:
```
$pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute([':name' => $_GET['name']]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
```
- mysqli:
```
$mysqli = new mysqli($host, $user, $pass, $db);
$stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param("s", $_GET['name']);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
```
Дополнительно (рекомендации):
- Валидировать/нормализовать ввод (длина, разрешённые символы) — белые списки.
- Принцип наименьших привилегий для учётной записи БД.
- Логи и мониторинг подозрительных запросов.
- При невозможности использовать подготовленные выражения — применять проверенное экранирование (например, mysqli_real_escape_string) как временную меру.
21 Ноя 2025 в 11:31
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир