Выбор ответа Middle JDBC и транзакции обновлено
Параметр в ORDER BY
Вопрос
Пользователь выбирает колонку сортировки. Как безопасно подставить её в запрос?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сверить значение с белым списком колонок и вставить в текст SQL. Параметры ? подставляют значения, а не идентификаторы: ORDER BY ? отсортирует по константе, то есть не отсортирует.
Варианты ответа
- Передать колонку через
ps.setString(1, column)вORDER BY ? - Экранировать кавычки в имени колонки перед вставкой в запрос
- Сверить значение с белым списком колонок и вставить в текст SQLправильный ответ
- Обернуть имя колонки в двойные кавычки как идентификатор
Разбор
Параметры ? подставляют значения, а не идентификаторы: ORDER BY ? отсортирует по константе, то есть не отсортирует. Имя колонки должно быть частью текста запроса, поэтому его проверяют по белому списку (или маппингу из enum). Ручное экранирование и кавычки не защищают надёжно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.