Выбор ответа Middle Инъекции: SQL, NoSQL, команды спрашивают часто обновлено

Сортировка по колонке из запроса

Вопрос

Как безопасно реализовать ORDER BY по полю, которое выбирает пользователь?

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

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

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

Коротко

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

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

  1. Передать имя колонки как параметр запроса (ORDER BY ?), драйвер его экранирует
  2. Экранировать кавычки и обратные слеши в имени колонки перед подстановкой
  3. Проверить, что значение не содержит слов DROP, UNION и точки с запятой
  4. Сопоставить значение с allowlist колонок и подставлять только из спискаправильный ответ

Разбор

Плейсхолдеры работают только для значений, не для идентификаторов: ORDER BY ? отсортирует по константе или вызовет ошибку. Экранирование кавычек не защищает идентификатор от выражений вроде (CASE WHEN ...). Чёрный список слов обходится. Надёжно только сопоставление с allowlist.

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

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