Код 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
  1. Имена полей нельзя передать плейсхолдером: сверяйте их со списком.
  2. Для сортировки отрежьте один ведущий минус и проверьте остаток.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.