hostprofi.ru
Подобрать хостинг
Термин·буква З

Защита от SQL-инъекций

краткое определение

Защита от SQL-инъекций — предотвращение атак, при которых вредоносный SQL-код подставляется в запросы к базе данных через пользовательский ввод. Основные методы: параметризованные запросы, ORM, WAF и валидация данных.

SQL-инъекция (SQLi) — атака, при которой злоумышленник вставляет SQL-код в пользовательские поля формы. Пример: поле логина с вводом ' OR '1'='1 при конкатенации строк превращает запрос SELECT * FROM users WHERE login='admin' OR '1'='1' — аутентификация обходится. SQLi занимает первое место в OWASP Top 10 с 2003 года.

Как работает защита

Параметризованные запросы (Prepared Statements) — правильный метод: SQL-код и данные передаются раздельно. Драйвер базы данных экранирует данные автоматически.

$stmt = $pdo->prepare("SELECT * FROM users WHERE login = ?");
$stmt->execute([$login]);

ORM (Eloquent, Doctrine, SQLAlchemy) — автоматически используют параметризованные запросы, полностью убирая риск SQLi при стандартном использовании.

WAF (Imunify360, ModSecurity, Cloudflare WAF) — дополнительный уровень: анализирует HTTP-запросы, блокирует паттерны SQLi. Не заменяет параметризованные запросы в коде.

Минимальные привилегии: пользователь БД для веб-приложения должен иметь только SELECT/INSERT/UPDATE, не GRANT, DROP, CREATE.

История

SQL-инъекции описаны Рейнхардом Вёрнером в 1998 году. Атаки использовались против крупных сайтов в 2000-х: взлом Sony PlayStation Network (2011) — 77 млн аккаунтов, частично через SQLi. OWASP включает SQLi в Top 10 с момента основания списка в 2003 году.

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

  • Classic (In-band) — результат запроса виден в ответе.
  • Blind — ответ не показывает данные, но меняет поведение приложения (TRUE/FALSE).
  • Time-based — задержка ответа: SLEEP(5) подтверждает уязвимость.
  • Out-of-band — данные экфильтруются через DNS или HTTP-запросы.

Связь с хостингом

На хостинге с MySQL или PostgreSQL защита от SQLi — ответственность разработчика приложения, не хостера. Хостер добавляет WAF как дополнительный слой. WordPress использует $wpdb->prepare() для безопасных запросов; проблемы возникают в плагинах с самописными SQL-запросами.

Ключевые отличия от похожих терминов

XSS (Cross-Site Scripting) — внедрение JavaScript в страницу, атакует пользователя. SQLi — атакует базу данных, экфильтрует или модифицирует данные. CSRF — подделка запроса от имени пользователя. Все три входят в OWASP Top 10.

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

In-band: результат инъекции возвращается напрямую (Error-based, Union-based). Inferential (Blind): результат не виден, но можно извлечь данные через True/False-запросы или time-based задержки. Out-of-band: данные извлекаются через DNS или HTTP к внешнему серверу.

Защита на уровне кода

Prepared statements (параметризованные запросы) — единственная надёжная защита: $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$id]);. ORM (Eloquent, Doctrine) — параметризация по умолчанию. Экранирование — ненадёжно, не рекомендуется как единственная мера.

Дополнительные уровни защиты

WAF блокирует известные паттерны SQL-инъекций. Минимальные привилегии пользователя БД: только SELECT/INSERT/UPDATE на нужные таблицы, без GRANT, FILE, DROP. Регулярное сканирование: sqlmap, Burp Suite. Imunify360 для shared-хостинга.

Другие термины