14 Окт в 14:55
3 +3
0
Ответы
1

Это выражение уязвимо к SQL‑инъекции: переменная ( \$user ) напрямую подставляется в строку запроса. Пример атаки: если ( \$user = "' OR '1'='1'" ), итоговый SQL станет
SELECT * FROM users WHERE name = '' OR '1'='1'
и вернёт все строки.

Как исправить (рекомендации):

Использовать подготовленные выражения (prepared statements) с параметризацией — самый надёжный способ.

Пример на PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute([':name' => user]);</li><li>Примернаmysqli:user]);</li><li>Пример на mysqli:
user]);</li><li>Примернаmysqli:
stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param("s", user);user);
user);
stmt->execute();

Валидация/фильтрация входа: если ожидается определённый формат (например, только буквы и цифры), применяйте проверку через регулярные выражения или whitelist.

При использовании LIKE — экранируйте спецсимволы % и _ и тоже используйте параметризацию.

Избегайте простого экранирования функций вроде addslashes(); приоритет — подготовленные выражения.

Коротко: замените конкатенацию переменной на подготовленный запрос с параметром и добавьте валидацию входа.

14 Окт в 16:56
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир