Введение в SQL-инъекции

SQL-инъекции (SQL Injection) — это одна из самых распространённых и опасных уязвимостей, которая может привести к утечке данных, удалению информации или даже захвату контроля над сервером. Если вы хотите понять, как работают SQL-инъекции, и как защитить свои приложения, эта статья для вас.

Что такое SQL-инъекция?

SQL-инъекция возникает, когда злоумышленник может вставить вредоносный SQL-код в запрос, который выполняет сервер. Это позволяет обойти авторизацию, извлечь или изменить данные, а иногда даже выполнить команды операционной системы.

Пример:

SELECT * FROM users WHERE username = 'admin' AND password = 'password';

Если пользователь введёт следующий вредоносный код в поле пароля:

' OR '1'='1

Запрос превратится в:

SELECT * FROM users WHERE username = 'admin' AND password = 9;' OR '1'='1';

Условие OR '1'='1' всегда истинно, и злоумышленник получает доступ к системе без пароля.

Типы SQL-инъекций

  1. Классическая SQL-инъекция (In-Band): Злоумышленник сразу видит результаты своего запроса. SELECT * FROM users WHERE id = 1 UNION SELECT version(), database(), user();
  1. Слепая SQL-инъекция (Blind): Данные не возвращаются напрямую, но можно их извлечь по косвенным признакам. SELECT * FROM users WHERE id = 1 AND LENGTH(username) > 5;
  1. Временная SQL-инъекция (Time-Based): Результаты зависят от времени выполнения. SELECT IF(LENGTH(username) > 5, SLEEP(5), 0);

Как защитить своё приложение?

SQL-инъекции легко предотвратить, если следовать лучшим практикам безопасности:

  1. Параметризованные запросы: Используйте подготовленные выражения. Пример на Python: cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password))
  1. Проверка пользовательского ввода: Убедитесь, что данные соответствуют ожидаемому формату. Например, числовой ID: if not id.isdigit(): raise ValueError("Некорректный ввод")
  2. Экранирование данных: В PHP можно использовать: $username = mysqli_real_escape_string($conn, $_POST['username']);
  3. Ограничение прав пользователя базы данных: Учётная запись базы данных не должна иметь привилегий на удаление таблиц или выполнение системных команд.
  4. Использование WAF (Web Application Firewall): Брандмауэры, такие как ModSecurity, фильтруют подозрительные запросы.

Пример безопасного кода

Пример авторизации с защитой от SQL-инъекций на Python:

import sqlite3

# Подключение к базе данных

conn = sqlite3.connect('example.db')

cursor = conn.cursor()

# Получение данных от пользователя

username = input("Введите имя пользователя: ")

password = input("Введите пароль: ")

# Параметризованный запрос

query = "SELECT * FROM users WHERE username = ? AND password = ?"

cursor.execute(query, (username, password))

# Проверка результата

user = cursor.fetchone()

if user:

print("Успешный вход!")

else:

print("Неверное имя пользователя или пароль.")

Заключение

SQL-инъекции — это серьёзная угроза, но их можно предотвратить, если следовать базовым принципам безопасности:

  • Используйте параметризованные запросы.
  • Проверяйте пользовательский ввод.
  • Ограничивайте права базы данных.
  • Обновляйте программное обеспечение.

Защищённый код — это ответственность каждого разработчика. Не забывайте делиться этими знаниями с командой, чтобы ваши приложения были надёжными и безопасными.

Другие наши проекты:

https://timcore.ru/

https://timcourse.ru/

https://timforensics.ru/

https://tarasovinvest.ru/

https://mikhailtarasovcom.ru/

https://timrobot.ru/

👨‍💻 https://vk.com/hacker_timcore - Образование для хакеров Junior, Middle.

🏫 https://vk.com/school_timcore - Школа этичного хакинга Timcore.

🤖 https://vk.com/programmer_timcore - Разработка роботов под заказ, готовые скрипты.

🎮 https://vk.com/timcore_games - Разработка игр.

🕵️‍♂️ https://vk.com/forensics_timcore - Услуги кибердетектива.

💰 https://vk.com/project_financing - Инвестиции (проектное финансирование).

Будем рады видеть Вас в числе наших посетителей и подписчиков в представленных сайтах и пабликах вк.

112 views·9 shares