Найдите и объясните уязвимость в этом PHP-фрагменте: $id = $_GET['id']; $query = "SELECT * FROM users WHERE id = $id"; $res = mysqli_query($conn, $query); — какие реальные риски и как безопасно переписать код

4 Мая в 06:00
15 +1
0
Ответы
1
Уязвимость: SQL-инъекция. Переменная \$id берётся напрямую из \$_GET и подставляется в SQL без экранирования, поэтому атакующий может изменить логику запроса.
Пример атаки: если отправить параметр id = 000 OR 1=11=11=1, получится запрос
SELECT * FROM users WHERE id = 000 OR 1=11=11=1 — это вернёт все записи. Также возможны составные полезные нагрузки (например попытки удаления таблиц или вытаскивания конфиденциальных данных).
Риски:
- раскрытие всех пользователей или другой чувствительной информации;
- изменение или удаление данных (например, DROP/UPDATE);
- обход контроля доступа (например, вход под чужим аккаунтом);
- в некоторых случаях — удалённое выполнение кода через уязвимые расширения/функции БД;
- компрометация всей БД при высоких привилегиях пользователя БД.
Как безопасно переписать (рекомендуемый способ — подготовленные выражения):
Пример с mysqli (рекомендуется):
$id = (int)$_GET['id']; // дополнительная валидация/каст
$stmt = mysqli_prepare($conn, "SELECT * FROM users WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
$res = mysqli_stmt_get_result($stmt);
Пример с PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $_GET['id']]);
$user = $stmt->fetch();
Дополнительные меры:
- использовать параметризованные запросы всюду, где есть ввод от пользователя;
- проверять/валидировать типы и диапазоны входных данных (например, что id — целое);
- давать учётной записи БД минимальные права (least privilege);
- не выводить детальные ошибки БД пользователю;
- при необходимости — применять WAF и регулярные аудиты кода.
Кратко: никогда не вставляйте сырые данные пользователя в SQL — используйте подготовленные выражения и валидацию.
4 Мая в 06:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир