You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug] Страницы кабинета отдают в чанк password hash и msCustomer.token — как #410, но в Fenom #840
#410 чинил ровно это для Web API: $customer->toArray() отдавал наружу password и token. Тогда завели CustomerPublicDto::PUBLIC_FIELDS и закрыли JSON-ответы.
Страницы личного кабинета на Fenom остались как были. Все три сервиса кладут в чанк сырой toArray():
Там секреты уходили в JSON стороннему клиенту — и это чинили как баг. Здесь они остаются на сервере, в области видимости шаблона, и наружу сами по себе не попадают. Прямой утечки нет, поэтому и severity ниже.
Но:
хеш и токен оказываются в одном шаге от вывода: {$customer | print_r} при отладке, забытый {$customer.token} в разметке, свой чанк от стороннего разработчика;
на кэшируемом ресурсе отрисованный HTML попадает в кэш страницы — а кабинет по недосмотру кэшируемым оказывается легко;
msCustomer.token после путей checkout может совпадать с API-токеном покупателя (#369), то есть цена ошибки выше, чем у обычного поля.
Заодно: в заказах тот же сырой вывод
OrdersPageService.php:203-215 отдаёт в чанк $order.token, $order.idempotency_key, а также полные $delivery и $address без фильтрации. Allowlist применён только к $payment — PaymentPublicFields.
Что предлагается
Применить существующий CustomerPublicDto::PUBLIC_FIELDS в трёх сервисах страниц — решение уже написано и проверено на Web API, дублировать логику не нужно.
Отдельно стоит решить, что делать с $order.token и $order.idempotency_key: по образцу PaymentPublicFields завести allowlist и для заказа с доставкой.
Ломающих изменений почти нет: чанк, который сегодня выводит password или token, работает не так, как задумано.
Activity
chore(release): 1.14.2-beta1 (#911)
fix(security): allowlist полей в процессорах покупателя и пользователя (