Выбор ответа Middle JDBC и транзакции обновлено

Параметр в ORDER BY

Вопрос

Пользователь выбирает колонку сортировки. Как безопасно подставить её в запрос?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сверить значение с белым списком колонок и вставить в текст SQL. Параметры ? подставляют значения, а не идентификаторы: ORDER BY ? отсортирует по константе, то есть не отсортирует.

Варианты ответа

  1. Передать колонку через ps.setString(1, column) в ORDER BY ?
  2. Экранировать кавычки в имени колонки перед вставкой в запрос
  3. Сверить значение с белым списком колонок и вставить в текст SQLправильный ответ
  4. Обернуть имя колонки в двойные кавычки как идентификатор

Разбор

Параметры ? подставляют значения, а не идентификаторы: ORDER BY ? отсортирует по константе, то есть не отсортирует. Имя колонки должно быть частью текста запроса, поэтому его проверяют по белому списку (или маппингу из enum). Ручное экранирование и кавычки не защищают надёжно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.