Найдите уязвимость в PHP‑фрагменте:
$name = $_GET['name']; $sql = "SELECT * FROM users WHERE name = '$name

18 Ноя в 10:11
3 +3
0
Ответы
1
Уязвимость: SQL‑инъекция.
Причина: значение из `$_GET['name']` вставляется напрямую в SQL‑строку без экранирования или параметризации, поэтому злоумышленник может подставить символы SQL (например, кавычку и дополнительные условия), изменив логику запроса и получив неавторизованный доступ к данным.
Пример сути атаки: если пользовательский ввод закрывает строковый литерал и добавляет условие/оператор, итоговый SQL меняется — это позволяет обойти фильтры или вытащить/изменить данные.
Как исправить (рекомендуется):
- Использовать подготовленные выражения (parameterized queries). Пример с PDO:
<?php
$pdo = new PDO($dsn, $user, $pass, $opts);
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute([':name' => $_GET['name']]);
$rows = $stmt->fetchAll();
?> - Или mysqli с bind_param.
- Дополнительно: валидировать/ограничивать вход (регулярные выражения или белый список допустимых символов), минимизировать права БД-пользователя, не выводить подробные ошибки БД пользователям.
Избегайте только экранирования вручную (например, ненадежных реализаций) — предпочтительны подготовленные запросы.
18 Ноя в 10:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир