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 — локальная установка не требуется.
Все уроки этого курса
- SQL-инъекции: как и почему они работают
- Межсайтовый скриптинг (XSS)
- Межсайтовая подделка запроса (CSRF)
- Небезопасная конфигурация и открытые сервисы