3 Ноя в 19:17
3 +1
0
Ответы
1
Это уязвимо к SQL‑инъекции: переменные вставляются прямо в строку запроса, поэтому злоумышленник может изменить логику WHERE. Пример полезной нагрузки: username = `' OR '1'='1' --` — это сделает условие истинным ( 1=11=11=1 ), и запрос вернёт записи независимо от пароля.
Как исправить (кратко):
1) Использовать подготовленные выражения (parameterized queries). Пример на PDO:
$pdo = new PDO(...);
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $username]);
$row = $stmt->fetch();
2) Не хранить пароли в открытом виде — хранить хэш и проверять через безопасные функции:
- при регистрации: $hash = password_hash($password, PASSWORD_DEFAULT);
- при входе: получить хэш из БД и проверить: if (password_verify($password, $hash)) { /* ok */ }
3) Не полагаться на простое экранирование; использовать минимальные привилегии БД и логирование подозрительных попыток.
Если нужно, вышлю конкретный пример исправления вашего кода (PDO или mysqli).
3 Ноя в 20:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир