Skip to content

fix(mgr-api): whitelist filter_* на списках customers - #457

Open
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-420-customer-filter-whitelist
Open

fix(mgr-api): whitelist filter_* на списках customers#457
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-420-customer-filter-whitelist

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

CustomersController::getList принимал любые filter_* и строил LIKE по произвольной колонке. filter_token=<prefix> давал oracle по секретному полю, хотя token не попадает в ответ списка.

Добавлен ManagerListFilterPolicy: whitelist полей UI-фильтров + blocklist секретных колонок. Тот же guard применён к спискам deliveries/payments (как в #420).

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #420

Как это было протестировано?

cd core/components/minishop3
php -l src/Services/Grid/ManagerListFilterPolicy.php   # exit 0
php -l src/Controllers/Api/Manager/CustomersController.php  # exit 0
php -l src/Controllers/Api/Manager/DeliveriesController.php   # exit 0
php -l src/Controllers/Api/Manager/PaymentsController.php     # exit 0
php tests/ManagerListFilterPolicyTest.php            # exit 0
composer ci:php                                    # exit 0 (14 smoke tests)
  • Ручное тестирование
  • Автоматические тесты (composer ci:php)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: branch fix/issue-420-customer-filter-whitelist
  • MODX: не требовался (smoke без MODX)
  • PHP: 8.2+

Скриншоты (если применимо)

n/a

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — n/a
  • PHPStan проходит без новых ошибок (локально; в CI пока нет)
  • ESLint проходит без ошибок — n/a (Vue не затронут)
  • Обновлён CHANGELOG.md — по политике релиза не требуется

Дополнительные заметки

Whitelist customers: customer_name, email, phone, is_active (+ alias active).

Blocklist (все grids): token, password, properties, class, validation_rules.

Бонус: customer_name теперь ищет по first_name/last_name (раньше LIKE шёл по несуществующей колонке).

Follow-up: унификация whitelist в OrdersController::applyFilter — отдельная задача.

Reject filter queries on secret msCustomer columns (token, password)
and route UI filter keys through ManagerListFilterPolicy. Apply the same
guard to deliveries and payments list endpoints.
@Ibochkarev Ibochkarev added priority: medium Средний приоритет bug Something isn't working labels Jul 27, 2026
Move OrdersController applyFilter whitelist into shared policy with explicit
ORDER_FILTER_MAP and blocklist. Align filter param guards with other grids.
@Ibochkarev
Ibochkarev requested a review from biz87 July 27, 2026 03:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working priority: medium Средний приоритет

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Manager API: filter_* на произвольные колонки msCustomer (в т.ч. token oracle)

1 participant