- Регистрация
- 13 Июн 2025
- Сообщения
- 4
- Реакции
- 2
- Баллы
- 3
Сегодня я хочу рассказать об одной из самых опасных уязвимостей в веб-приложениях — SQL-инъекции (SQLi).Всем привет!
Что такое SQL-инъекция?
SQL-инъекция — это атака, при которой злоумышленник внедряет вредоносный SQL-код в запрос к базе данных. Это позволяет выполнять произвольные команды, такие как:
- Кража данных (логины, пароли, платежные данные)
- Удаление или изменение данных
- Обход аутентификации
Пример уязвимого кода (PHP + MySQL)
Допустим, у нас есть форма входа:
Код:
php
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);
Код:
sql
' OR '1'='1' --
Код:
sql
SELECT * FROM users WHERE username = '' OR '1'='1' --' AND password = 'любой_пароль'
Код:
--
Код:
'1'='1'
[h2]Демонстрация атаки[/h2]
1. Кража данных
Вместо логина можно ввести:
Код:
sql
' UNION SELECT username, password FROM users --
2. Удаление таблиц
Код:
sql
'; DROP TABLE users; --
Как защититься?
1. Использование подготовленных выражений (Prepared Statements)
Код:
php
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
Код:
php
$username = mysqli_real_escape_string($conn, $_POST['username']);
Не используйте учетную запись с правами
Код:
root
Вывод
SQL-инъекции остаются серьезной угрозой, но их легко предотвратить, следуя рекомендациям выше. Всегда проверяйте пользовательский ввод!