Выбор ответа Middle Безопасность веб-приложения обновлено
Где ORM не спасает от инъекций
Вопрос
В каком случае Django ORM не защитит от SQL-инъекции?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: User.objects.raw(f"SELECT FROM authuser WHERE username = '{name}'"). ORM параметризует значения в filter, exclude, get и лукапах.
Варианты ответа
User.objects.raw(f"SELECT * FROM auth_user WHERE username = '{name}'")правильный ответUser.objects.filter(username=name)User.objects.filter(username__icontains=name)User.objects.raw("SELECT * FROM auth_user WHERE username = %s", [name])
Разбор
ORM параметризует значения в filter, exclude, get и лукапах. Но если собрать SQL f-строкой и передать в raw(), extra() или RawSQL, ORM уже ничего не экранирует. Тот же raw() с плейсхолдером и списком параметров безопасен. В SQLAlchemy аналогично: text() с :param безопасен, text(f"...") нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.