Mediumsecurity
Что такое SQL injection и PreparedStatement?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
SQL injection — атака через пользовательский ввод, попавший в запрос конкатенацией. Защита — параметризованные запросы (PreparedStatement): SQL и данные разделены, драйвер экранирует значения.
# ПЛОХО: конкатенация → инъекция
q = "SELECT * FROM users WHERE name = '" + name + "'"
cursor.execute(q)
# name = "' OR '1'='1" → вернёт всех пользователей
# ХОРОШО: параметризованный запрос
cursor.execute(
"SELECT * FROM users WHERE name = %s",
(name,)
)Дополнительно: валидация на app-уровне, principle of least privilege (БД-юзер без прав на DROP), WAF. Все ORM (Django, SQLAlchemy) параметризуют под капотом. Никогда не используйте f-string/format/+ для подстановки данных в SQL.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.