Найдите уязвимость в PHP-фрагменте: $query = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'"; — какие атаки возможны, как исправить запрос и какие практики следует применить для предотвращения инъекций и других веб-уязвимостей

31 Мар в 16:02
21 +1
0
Ответы
1
Уязвимость
- Это классический SQL‑инъекшн: строка из `$_GET['name']` вставляется в SQL без обработки, так что атакующий может подставить произвольный SQL.
Какие атаки возможны (примеры полезных полезностей)
- Аутентификация/обход фильтров: ` ' OR '1'='1' -- ` — вернёт все записи.
- Утечка данных через UNION: ` ' UNION SELECT username, password FROM admin -- `
- Деструктивные операции: ` '; DROP TABLE users; -- `
- Блайнд‑инъекции для экстракции данных, time‑based payloads и т. п.
Как исправить запрос (рекомендуемый способ)
- Использовать подготовленные выражения (parameterized queries) и привязку параметров. Примеры.
PDO:
```
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute(['name' => $_GET['name']]);
$user = $stmt->fetch();
```
mysqli:
```
$stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param('s', $_GET['name']);
$stmt->execute();
$result = $stmt->get_result();
```
Дополнительные меры против инъекций и других веб‑уязвимостей (рекомендации)
- Валидировать вход: whitelist (разрешённые символы/формат, длина). Пример: ограничить до допустимых букв/длин.
- Не формировать SQL конкатенацией; всегда параметры.
- Ограничить привилегии БД: пользователь приложения должен иметь минимальные права (только SELECT/INSERT/UPDATE по необходимости).
- Кодирование/экранирование при выводе (HTML‑encoding) — предотвращение XSS.
- Использовать HTTPS, Secure и HttpOnly для cookie, CSRF‑токены для форм.
- Логи и мониторинг подозрительных запросов; rate limiting на критичные эндпойнты.
- Не показывать детальные ошибки пользователю; централизованная обработка ошибок.
- Обновления зависимостей, статический/динамический сканинг приложений (SAST/DAST), WAF при необходимости.
- Использовать ORM или фреймворк с встроенной защитой, но знать их ограничения.
- Для паролей — хранить хеши сильным алгоритмом (bcrypt/argon2), не в базе открытым текстом.
Краткое правило безопасности: никогда не доверяйте входу — фильтруйте, параметризуйте запросы, минимизируйте привилегии и кодируйте вывод.
31 Мар в 16:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир