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 подскажет развёрнутый ответ в реальном времени.