16 lines
1.7 KiB
Markdown
16 lines
1.7 KiB
Markdown
# Task 16: Общий pre-auth ключ блокирует легальных пользователей
|
||
|
||
**Assigned to:** Antigravity (Implementation Orchestrator)
|
||
**Priority:** MEDIUM (доступность)
|
||
**Date:** 2026-08-21
|
||
**Base SHA:** `ef8360bd4ba892c96fc3add1d706ce3910884edf`
|
||
|
||
## Проблема
|
||
`requireAuthenticatedUser` вызывает `preAuthRateLimiter.assertCanAttempt('pre-auth:' + clientIp)` для каждого запроса ДО проверки сессии. При пустом `req.ip` и `TRUST_PROXY !== 'true'` `resolveClientIp` возвращает `direct-client`. Если анонимный атакующий исчерпал лимит `pre-auth:direct-client` (60 запросов), следующий легальный пользователь с валидной сессией получает 429 до того, как система проверит сессию.
|
||
|
||
## Scope
|
||
1. Восстановить удалённый тест `authenticated organizer on the same IP is not blocked by another client anonymous flood` и убедиться, что он падает на base SHA.
|
||
2. Архитектурное решение проблемы:
|
||
- Анализ вариантов A, B, C.
|
||
- Реализация защиты от DoS на общем IP/идентичности, при этом сохраняя защиту БД от флуда невалидными cookie (<= 60 обращений к store при флуде) и защиту эндпоинтов от анонимного флуда.
|
||
3. Полный тестовый прогон: все тесты зелёные, восстановленный тест проходит, верификация чисто.
|