[Security] Bound auth requests before proxying to backend #155

Closed
opened 2026-11-05 06:45:42 +03:00 by codex-bot · 2 comments
Owner

Результат

Добавить nginx admission budget для POST /api/v1/auth/login и /api/v1/auth/register, решение владельца по WealthLedger/backend#73: только nginx limit_req, регистрацию оставить открытой. Внешняя HTTPS proxy chain пока неизвестна.

Scope

Использовать один глобальный ключ на точные auth paths (не доверять непроверенному X-Forwarded-For; иные API запросы не лимитировать), 2r/s, burst=5 nodelay, 429 при переполнении. Отказ до upstream/bcrypt, восстановление по budget без блокировки аккаунта. Не добавлять Redis/CAPTCHA.

Acceptance Criteria

  • nginx -t проходит на production image.
  • Изолированная серия POST на login/register получает 429 после переполнения и после паузы снова допускается; frontend auth показывает существующую общую ошибку без logout.
  • Публичные прочие API и SPA не затронуты.
  • Ограничение общей квоты и неизвестность внешней proxy chain записаны в backend#73; для per-client лимита требуется отдельное подтверждение trusted IP chain.

Cross-repo: WealthLedger/backend#73, frontend owner of docker/nginx.conf.

## Результат Добавить nginx admission budget для POST `/api/v1/auth/login` и `/api/v1/auth/register`, решение владельца по WealthLedger/backend#73: только nginx `limit_req`, регистрацию оставить открытой. Внешняя HTTPS proxy chain пока неизвестна. ## Scope Использовать один глобальный ключ на точные auth paths (не доверять непроверенному X-Forwarded-For; иные API запросы не лимитировать), `2r/s`, `burst=5 nodelay`, 429 при переполнении. Отказ до upstream/bcrypt, восстановление по budget без блокировки аккаунта. Не добавлять Redis/CAPTCHA. ## Acceptance Criteria - [ ] `nginx -t` проходит на production image. - [ ] Изолированная серия POST на login/register получает 429 после переполнения и после паузы снова допускается; frontend auth показывает существующую общую ошибку без logout. - [ ] Публичные прочие API и SPA не затронуты. - [ ] Ограничение общей квоты и неизвестность внешней proxy chain записаны в backend#73; для per-client лимита требуется отдельное подтверждение trusted IP chain. Cross-repo: WealthLedger/backend#73, frontend owner of docker/nginx.conf.
Author
Owner

Local implementation in working tree branch fix/155-auth-admission-and-events-contract: nginx shared key only on exact POST:/api/v1/auth/login and POST:/api/v1/auth/register, 2r/s + burst 5 nodelay, 429. nginx -t PASS. Isolated two-container check (proxy has backend DNS, but test upstream does not listen :3000): burst 6 requests forwarded and returned 502, next 6 rejected with 429; 4s later POST forwarded again (502). GET login, POST logout not throttled. This proves nginx rejection/recovery before upstream proxy; real backend bcrypt and external HTTPS proxy chain remain unverified. Frontend npm run verify PASS. Shared budget can be exhausted by one client; per-IP limit requires verified trusted chain.

Local implementation in working tree branch `fix/155-auth-admission-and-events-contract`: nginx shared key only on exact `POST:/api/v1/auth/login` and `POST:/api/v1/auth/register`, 2r/s + burst 5 nodelay, 429. `nginx -t` PASS. Isolated two-container check (proxy has backend DNS, but test upstream does not listen :3000): burst 6 requests forwarded and returned 502, next 6 rejected with 429; 4s later POST forwarded again (502). GET login, POST logout not throttled. This proves nginx rejection/recovery before upstream proxy; real backend bcrypt and external HTTPS proxy chain remain unverified. Frontend `npm run verify` PASS. Shared budget can be exhausted by one client; per-IP limit requires verified trusted chain.
Author
Owner

Изменения слиты в develop: frontend PR #156, CI run 1956 commits/security/verify PASS. Изолированная nginx-проверка 429/refill PASS; текущая auth форма показывает общую ошибку при любом отказе запроса. Продуктовый rollout и trusted внешняя proxy chain ещё не проверены; это остаётся в WealthLedger/backend#73.

Изменения слиты в `develop`: frontend PR #156, CI run 1956 commits/security/verify PASS. Изолированная nginx-проверка 429/refill PASS; текущая auth форма показывает общую ошибку при любом отказе запроса. Продуктовый rollout и trusted внешняя proxy chain ещё не проверены; это остаётся в WealthLedger/backend#73.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/frontend#155