Skip to content

fix(manager): ограничить payload /deliveries-active whitelist'ом#427

Merged
biz87 merged 2 commits into
betafrom
fix/issue-416-deliveries-active-payload
Jul 23, 2026
Merged

fix(manager): ограничить payload /deliveries-active whitelist'ом#427
biz87 merged 2 commits into
betafrom
fix/issue-416-deliveries-active-payload

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

GET /api/mgr/deliveries-active отдавал полный $item->toArray() модели msDelivery. В ответ попадали properties, class, validation_rules и прочие внутренние поля интеграций доставки. Маршрут доступен любому аутентифицированному менеджеру (только Auth, без mssetting_save).

Изменения:

  • Обработчик перенесён в DeliveriesController::getActiveDropdown().
  • Ответ строится по whitelist ACTIVE_DROPDOWN_FIELDS: id, name, price, active, position.
  • Сохранён перевод имён ms3_* через lexicon; добавлена сортировка по position.
  • active остаётся integer 0|1, как в прежнем toArray().

Контракт: с /deliveries-active больше не приходят properties / class / validation_rules / description / logo и т.п. Полный CRUD по-прежнему на /api/mgr/deliveries под mssetting_save.

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

  • Исправление бага (non-breaking change)
  • Другое: урезание payload dropdown (намеренный security-fix shape)

Связанные Issues

Closes #416

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

  • Автоматические тесты
  • Live smoke на локальном MODX (project.test)

Команды и результат:

php -l .../DeliveriesController.php                         # exit 0
php -l .../config/routes/manager.php                         # exit 0
php tests/DeliveriesActiveDropdownFieldsTest.php             # OK (exit 0)
php tests/DirectFilterKeysTest.php                           # OK (exit 0)

Red-green: добавление properties в whitelist валит тест; после отката — OK.

Live: getActiveDropdown() → 9 доставок, ключи только id,name,price,active,position, без secrets.

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

  • MiniShop3: beta / Manager REST
  • MODX: 3.x
  • PHP: 8.2+

Чеклист

  • Код соответствует стилю проекта
  • Изменения не ломают Vue OrderView (endpoint там не используется; combo идёт через model-fields)
  • Лексиконы (не требуются)
  • Затронутые PHP-файлы проходят php -l

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

Out of scope (как в issue):

  • /statuses-dropdown по-прежнему отдаёт toArray(); у статусов нет properties/class как у доставок — отдельная задача при необходимости.
  • Auth-only на маршруте без PermissionMiddleware сохранён (dropdown для форм заказа).

@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время bug Something isn't working labels Jul 17, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 July 17, 2026 09:22
GET /api/mgr/deliveries-active previously returned full msDelivery::toArray(),
leaking integration properties/class/validation_rules to any authenticated
manager. Serve only id/name/price/active/position via DeliveriesController.
@Ibochkarev
Ibochkarev force-pushed the fix/issue-416-deliveries-active-payload branch from 4ae613a to 64ca218 Compare July 23, 2026 16:08
@biz87

biz87 commented Jul 23, 2026

Copy link
Copy Markdown
Member

Data-leak fix, red-green прогнал вручную:

  • RED: добавил properties в ACTIVE_DROPDOWN_FIELDS → тест упал («must not contain secret field properties»). Тест стережёт и от секретов в whitelist, и от toArray в методе.
  • GREEN: откат → OK DeliveriesActiveDropdownFieldsTest.

Проверил:

  • Никто в коде не вызывает /deliveries-active (grep по Vue/JS/PHP пусто) — внутренних потребителей нет, сужение payload безопасно. Vue OrderView combo идёт через model-fields.
  • Whitelist полный для dropdown: id/name (перевод)/price/active/position — ничего нужного не выпало.
  • Раньше inline toArray() тёк properties/class/validation_rules/description/logo; теперь formatActiveDropdownItem() итерирует whitelist явно (fail-closed).
  • PHPStan чист, merge с beta бесконфликтный, все 10 smoke зелёные на merged версии.
  • Влил beta в head-ветку → CI на актуальной базе.

Тот же уровень, что #402/#404/#428. Блокеров нет.

Для CHANGELOG: /deliveries-active больше не отдаёт properties/class/validation_rules/description/logo — только id/name/price/active/position.

Мержим.

@biz87
biz87 merged commit 96799ea into beta Jul 23, 2026
2 checks passed
@biz87
biz87 deleted the fix/issue-416-deliveries-active-payload branch July 23, 2026 19:19
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: high Важно исправить в ближайшее время

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Manager API: /deliveries-active отдаёт полный toArray() включая properties

3 participants