Добро пожаловать на BlackSAMP - ФОРУМ

  • Приватные и секретные разделы доступны только зарегистрированным пользователям.

    Вся важная информация в нашем ТГ: t.me/gtablack

    На данном форуме запрещено публиковать контент нарушающий Российское законодательство, за это последует блокировка ФА.

Уязвимость SQL-инъекции

Количество просмотров: 45

IlyaMarkinV

Редактор
Редактор
Регистрация
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-запрос будет выглядеть так:
Код:
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();
2. Экранирование спецсимволов
Код:
php
   $username = mysqli_real_escape_string($conn, $_POST['username']);
3. Ограничение прав пользователя БД
Не используйте учетную запись с правами
Код:
root
для веб-приложений.


Вывод

SQL-инъекции остаются серьезной угрозой, но их легко предотвратить, следуя рекомендациям выше. Всегда проверяйте пользовательский ввод!
 
Сверху Снизу