SQL Injection: что это и как защитить свой сайт
Механизм SQL Injection
SQL Injection — это техника внедрения вредоносного SQL-кода в запросы к базе данных. Когда приложение неправильно обрабатывает пользовательский ввод, злоумышленник может изменить логику запроса, получить доступ к любым данным или даже удалить таблицы.
Классический пример: форма авторизации с запросом SELECT * FROM users WHERE login = '$login' AND password = '$password'. Если в поле логина ввести admin'--, запрос превратится в SELECT * FROM users WHERE login = 'admin'--' AND password = '...' — и пароль будет проигнорирован.
Современные методы защиты
Параметризованные запросы (Prepared Statements) — единственно правильный способ работы с SQL. Вместо конкатенации строк используйте placeholder'ы, которые база данных обрабатывает как данные, а не как код. Это защищает от 100% классических SQLi.
ORM с осторожностью — современные ORM (Django ORM, SQLAlchemy, Hibernate) по умолчанию используют параметризованные запросы. Но raw queries и raw SQL фрагменты могут быть уязвимы. Избегайте их или используйте с крайней осторожностью.
Принцип наименьших привилегий — приложение должно подключаться к БД под учётной записью с минимально необходимыми правами. Даже при успешной SQLi злоумышленник не сможет удалить таблицы или получить доступ к другим базам.
WAF и RASP — Web Application Firewall может блокировать очевидные попытки SQLi на уровне сети. Runtime Application Self-Protection (RASP) анализирует поведение приложения в реальном времени и блокирует аномальные запросы.