0Pricing
Cyber Security Academy · Урок

SQL-инъекции: как и почему они работают

Разберитесь в классических, слепых и внеполосных SQL-инъекциях и узнайте, почему параметризованные запросы предотвращают их

«SQL-инъекции: как и почему они работают» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.

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

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

Как работает SQL-инъекция

Форма входа выполняет запрос: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'

Если атакующий вводит ' OR 1=1-- в качестве имени пользователя, запрос превращается в: SELECT * FROM users WHERE username='' OR 1=1--' AND password='...' — и возвращает всех пользователей.

Виды SQL-инъекций

Варианты SQLi:

  • Внутриканальная: результаты возвращаются непосредственно в ответе (классическая, на основе ошибок)
  • Слепая булева: прямого вывода нет, данные выводятся из ответов «истина/ложь»
  • Слепая на основе времени: данные выводятся из задержек ответа (SLEEP(5))
  • Внеполосная: данные извлекаются через DNS/HTTP-запросы

Инъекция на основе UNION

Атаки UNION добавляют результаты запросов, контролируемых атакующим:

-- Discover number of columns:
id=1 ORDER BY 3--
-- Extract data:
id=1 UNION SELECT username,password,NULL FROM users--

Инъекция на основе ошибок

Сообщения об ошибках раскрывают структуру базы данных. Атакующий вводит данные, вызывающие синтаксическую ошибку, и полученное сообщение об ошибке раскрывает имена таблиц, имена столбцов или версию базы данных. В рабочей среде отключайте подробные сообщения об ошибках.

Слепая SQL-инъекция

Если видимый вывод отсутствует, атакующие используют булевы условия:

-- If admin exists, page loads normally:
id=1 AND (SELECT COUNT(*) FROM users WHERE username='admin')=1--
-- Time-based:
id=1; IF(1=1) WAITFOR DELAY '0:0:5'--

sqlmap: автоматизированная SQL-инъекция

sqlmap автоматизирует обнаружение и эксплуатацию SQL-инъекций. Он может выгружать базы данных, читать файлы и даже выполнять команды OS, если у пользователя базы данных достаточно прав.

sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D webapp -T users --dump

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

Основная защита — параметризованные запросы (подготовленные выражения). Введённые пользователем данные передаются как параметр и никогда не объединяются со строкой запроса:

# Python (safe):
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
# Node.js (safe):
pool.query("SELECT * FROM users WHERE id = $1", [userId])

Защита ORM

Использование ORM (SQLAlchemy, Hibernate, Sequelize) обычно предотвращает SQL-инъекции, поскольку запросы создаются с помощью безопасных абстракций. Однако методы необработанных запросов (execute(), query()) с подстановкой строк обходят защиту ORM.

Проверка входных данных и WAF

Дополнительные меры защиты:

  • Проверяйте данные и разрешайте только предусмотренные типы ввода (целые числа, адреса электронной почты)
  • Межсетевой экран веб-приложений (WAF) для обнаружения шаблонов инъекций
  • Учётные записи базы данных с минимальными правами (без DROP и UNION в запросах только для чтения)
  • Хранимые процедуры (снижают поверхность атаки, но не являются полным решением)

Последствия SQL-инъекции

Успешная SQL-инъекция может привести к полной выгрузке базы данных, обходу аутентификации, изменению или удалению данных, чтению файлов сервера (LOAD_FILE), записи веб-оболочек и выполнению команд OS с помощью xp_cmdshell (MSSQL).

Быстрая проверка: SQL-инъекция

Какова основная защита от SQL-инъекций?

Итоги урока

SQL-инъекция изменяет запросы к базе данных с помощью непроверенных данных, введённых пользователем. Типы атак включают классические, слепые логические, основанные на времени и основанные на UNION. Основная защита — параметризованные запросы: никогда не объединяйте пользовательский ввод со строкой SQL. Осторожно используйте средства объектно-реляционного отображения, применяйте учетные записи базы данных с минимальными привилегиями и отключайте подробные сообщения об ошибках.

Часто задаваемые вопросы

Урок «SQL-инъекции: как и почему они работают» бесплатный?

Да — полный текст урока «SQL-инъекции: как и почему они работают» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.

Чему я научусь в уроке «SQL-инъекции: как и почему они работают»?

Разберитесь в классических, слепых и внеполосных SQL-инъекциях и узнайте, почему параметризованные запросы предотвращают их Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cyber Security Academy?

Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «SQL-инъекции: как и почему они работают»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cyber Security Academy?

Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. SQL-инъекции: как и почему они работают
  2. Межсайтовый скриптинг (XSS)
  3. Межсайтовая подделка запроса (CSRF)
  4. Небезопасная конфигурация и открытые сервисы
← Назад к Cyber Security Academy