Skip to content

fix(api): omit customer secrets from profile/add responses#428

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-410-customer-profile-secrets
Open

fix(api): omit customer secrets from profile/add responses#428
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-410-customer-profile-secrets

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

PUT /api/v1/customer/profile и POST /api/v1/customer/add отдавали $customer->toArray() целиком: в JSON попадали password (hash) и msCustomer.token. После путей checkout, где token может совпадать с API-токеном (#369), это даёт захват сессии.

Добавлен CustomerPublicDto с allowlist публичных полей (fail-closed). Оба success-ответа профиля сериализуют клиента через него.

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

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

Ответ data.customer больше не содержит секреты и lock/privacy-поля (password, token, privacy_ip, failed_login_attempts, blocked_until, is_blocked, user_id). Клиенты, которые читали эти ключи из profile/add, нужно обновить. Новые колонки модели (в т.ч. OE) в публичный payload не попадают, пока их явно не добавят в allowlist.

Связанные Issues

Closes #410

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

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint)
  • Тестирование на разных версиях PHP/MODX

Gate E:

  • php -l на CustomerPublicDto.php, CustomerProfileController.php, CustomerPublicDtoTest.php → exit 0
  • php core/components/minishop3/tests/CustomerPublicDtoTest.php → exit 0 (OK CustomerPublicDtoTest)

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

  • MiniShop3: branch fix/issue-410-customer-profile-secrets
  • MODX: n/a (static test)
  • PHP: 8.2+

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

До После

Чеклист

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

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

Web API returned password hash and msCustomer.token via toArray().
Use an allowlisted public DTO for PUT profile and POST add.
@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время bug Something isn't working labels Jul 20, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 July 20, 2026 08:25
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] Web API: profile/add отдаёт password hash и msCustomer.token в JSON

1 participant