Skip to content

fix(auth): session bypass после revoke API-токенов + Web logout - #462

Open
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-409-token-session-revoke
Open

fix(auth): session bypass после revoke API-токенов + Web logout#462
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-409-token-session-revoke

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

TokenMiddleware пропускал non-public запросы по одному $_SESSION['ms3']['customer_id'] без проверки API-токена в БД. После revoke на одном устройстве другое с живой PHP-сессией сохраняло доступ. В Web REST не было POST /api/v1/customer/logout, хотя процессор уже существовал.

Исправление:

  • убран session short-circuit; customer_token из session проходит DB-валидацию;
  • stale customer_id без токена очищается через clearClientTokenState();
  • AuthorizedCustomerTrait — только customer через resolveApiToken();
  • POST /api/v1/customer/logoutLogout processor с TokenMiddleware, public route;
  • logout резолвит customer из session/Bearer/cookie, revokeTokens, anonymous token, session_regenerate_id(true).

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

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

Связанные Issues

Closes #409

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

cd core/components/minishop3
php -l src/Middleware/TokenMiddleware.php              # exit 0
php -l src/Controllers/Api/Web/AuthorizedCustomerTrait.php  # exit 0
php -l src/Processors/Api/Customer/Logout.php            # exit 0
php -l config/routes/web.php                           # exit 0
php tests/TokenSessionRevokePolicyTest.php             # exit 0
composer ci:php                                        # exit 0 (14 smoke)
  • Ручное тестирование (анализ auth flow + review battery)
  • Автоматические тесты
  • Тестирование на разных версиях PHP/MODX

Чеклист

  • Код соответствует стилю проекта
  • Изменения не ломают существующую функциональность
  • Лексиконы — n/a (используются существующие ключи)
  • CHANGELOG — release-time

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

Deferred (follow-up): snippet-слой ms3_customer / CustomerPageService всё ещё может опираться на session customer_id; CustomerProfileController / CustomerEmailController читают session напрямую (middleware на их роутах уже синхронизирует session после валидации токена).

@Ibochkarev
Ibochkarev requested a review from biz87 July 28, 2026 05:37
@Ibochkarev Ibochkarev added bug Something isn't working priority: high Важно исправить в ближайшее время labels Jul 28, 2026
@Ibochkarev
Ibochkarev force-pushed the fix/issue-409-token-session-revoke branch 2 times, most recently from 542cb7f to 79c3439 Compare July 29, 2026 11:31
Remove customer_id-only auth in TokenMiddleware and AuthorizedCustomerTrait,
add POST /api/v1/customer/logout with token-aware Logout processor, and
regenerate session id on logout.
@Ibochkarev
Ibochkarev force-pushed the fix/issue-409-token-session-revoke branch from 79c3439 to 9fffbb7 Compare August 1, 2026 09:37
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] TokenMiddleware: session short-circuit обходит revoke API-токенов + нет Web logout

1 participant