Выбор ответа Middle Инъекции: SQL, NoSQL, команды спрашивают часто обновлено
Сортировка по колонке из запроса
Вопрос
Как безопасно реализовать ORDER BY по полю, которое выбирает пользователь?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сопоставить значение с allowlist колонок и подставлять только из списка. Плейсхолдеры работают только для значений, не для идентификаторов: ORDER BY ? отсортирует по константе или вызовет ошибку.
Варианты ответа
- Передать имя колонки как параметр запроса (
ORDER BY ?), драйвер его экранирует - Экранировать кавычки и обратные слеши в имени колонки перед подстановкой
- Проверить, что значение не содержит слов DROP, UNION и точки с запятой
- Сопоставить значение с allowlist колонок и подставлять только из спискаправильный ответ
Разбор
Плейсхолдеры работают только для значений, не для идентификаторов: ORDER BY ? отсортирует по константе или вызовет ошибку. Экранирование кавычек не защищает идентификатор от выражений вроде (CASE WHEN ...). Чёрный список слов обходится. Надёжно только сопоставление с allowlist.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.