ORM обычно отделяет SQL-шаблон от значений параметров и передаёт их драйверу для безопасной привязки. Пользовательские данные не должны становиться частью синтаксиса запроса.
Как Python ORM защищает от SQL-инъекций под капотом?
ORM обычно отделяет SQL-шаблон от значений параметров и передаёт их драйверу для безопасной привязки. Пользовательские данные не должны становиться частью синтаксиса запроса.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
ORM обычно отделяет SQL-шаблон от значений параметров и передаёт их драйверу для безопасной привязки. Пользовательские данные не должны становиться частью синтаксиса запроса.
Например, фильтр по имени формирует условие с параметром, а не склеивает имя с кавычками в SQL. Конкретный способ передачи и экранирования зависит от драйвера и протокола.
Защита не распространяется автоматически на f-строки в raw SQL, пользовательские имена таблиц или направления сортировки. Идентификаторы проверяйте по allowlist или формируйте безопасным API. ORM также не заменяет проверку владельца данных: отсутствие SQL-инъекции не предотвращает IDOR и ошибки авторизации.