Код Middle Инъекции: SQL, NoSQL, команды обновлено
Безопасный построитель запроса с фильтрами и сортировкой
Условие
Напишите build_query(filters, sort), которая строит параметризованный запрос к таблице users.
- Базовый запрос:
SELECT id, name FROM users. filters: словарь поле → значение. Разрешённые поля:name,city,age. Условия соединяются черезANDв порядке ключей:WHERE city = %s AND age = %s. Значения идут в список параметров.sort: пустая строка (без сортировки), имя разрешённого поля (ORDER BY name ASC) или имя с минусом (-ageдаётORDER BY age DESC).- Если в
filtersесть неразрешённое поле илиsortнекорректен, вернитеNone.
Верните список [sql, params].
Примеры
build_query({"city":"Kazan"}, "") // ["SELECT id, name FROM users WHERE city = %s", ["Kazan"]]
build_query({"city":"Kazan","age":30}, "-age") // ["SELECT id, name FROM users WHERE city = %s AND age = %s ORDER BY age DESC", ["Kazan", 30]]
build_query({}, "name") // ["SELECT id, name FROM users ORDER BY name ASC", []]
Как подойти
Подсказки: 2
- Имена полей нельзя передать плейсхолдером: сверяйте их со списком.
- Для сортировки отрежьте один ведущий минус и проверьте остаток.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.