Услуги
Заказы
Эксперты
Магазин
Портфолио
Журнал
Справочник
FAQ
Контакты
Услуги
Заказы
Эксперты
Магазин
Портфолио
Журнал
Справочник
Вопросы
FAQ
Контакты
Авторизация
Ничего не найдено
Найти
Проанализируйте уязвимость SQL-инъекции в фрагменте PHP: "$query = \"SELECT * FROM users WHERE name='\".$_GET['name'].\"'\";" — объясните, почему это опасно, продемонстрируйте пример атаки и предложите безопасную реализацию
Предыдущий
вопрос
Следующий
вопрос
Главная
Вопросы и ответы
Вопросы и ответы по информатике
Проанализируйте уязв...
Ответить
Получить ответ за 25 ₽
Задать свой вопрос
eva
21 Ноя 2025 в 10:47
18
+1
0
Ответы
1
Helper
Helper
Почему опасно (кратко):
- В строке запрос формируется конкатенацией с внешним вводом ($_GET['name']). Злоумышленник может вставить SQL-код, который изменит структуру запроса — классическая SQL-инъекция.
Пример атаки:
- Полезная нагрузка в параметре:
name = ' OR
1=11=1
1
=
1
--
- URL (пример):
/page.php?name=%27%20OR%201%3D1%20--
- Получившийся запрос:
"SELECT * FROM users WHERE name=' ' OR
1=11=1
1
=
1
-- '"
(последняя кавычка превращается в комментарий из‑за `--`, условие
1=11=1
1
=
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
Спасибо
Похожие вопросы
Охарактеризуйте этические дилеммы при внедрении систем распознавания лиц в публичных местах, включая вопросы…
eva
Информатика
24 Авг
1
Ответить
Разберите пример компактного формального языка регулярных выражений, показав случаи, где регулярки недостаточны…
eva
Информатика
24 Авг
1
Ответить
Проанализируйте баланс между приватностью и полезностью в публикации агрегированных данных (differential…
eva
Информатика
24 Авг
1
Ответить
Показать ещё
Другие вопросы
eva
Показать ещё
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Тип работы
Задача
Контрольная
Курсовая
Лабораторная
Дипломная
Реферат
Практика
Тест
Чертеж
Сочинение
Эссе
Перевод
Диссертация
Бизнес-план
Презентация
Билеты
Статья
Доклад
Онлайн-помощь
Рецензия
Монография
ВКР
РГР
Маркетинговое исследование
Автореферат
Аннотация
НИР
Докторская диссертация
Магистерская диссертация
Кандидатская диссертация
ВАК
Scopus
РИНЦ
Шпаргалка
Дистанционная задача
Творческая работа
Разместить заказ
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Задача
Контрольная работа
Курсовая работа
Лабораторная работа
Дипломная работа
Реферат
Отчет по практике
Тест
Чертеж
Сочинение
Эссе
Перевод
Диссертация
Бизнес-план
Презентация
Ответы на билеты
Статья
Доклад
Онлайн-помощь
Рецензия
Монография
ВКР
РГР
Маркетинговое исследование
Автореферат
Аннотация
НИР
Докторская диссертация
Магистерская диссертация
Кандидатская диссертация
ВАК
Scopus
РИНЦ
Шпаргалка
Дистанционная задача
Творческая работа
Заказать
Прямой эфир
- В строке запрос формируется конкатенацией с внешним вводом ($_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) как временную меру.