fix(proxy): harden security and add UpSnap debug logging

- XSS: escape serviceName in waking page HTML
- Session TTL: 24h expiration with periodic cleanup
- Rate limit: 5 login attempts / 15 min per IP
- CORS: restrict to same-origin + localhost
- SSRF: block localhost/metadata in service targets
- UpSnap: log response bodies on auth/wake failures

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Vadim Sobinin
2026-03-15 00:57:38 +03:00
parent f38c944690
commit 719afa8533
8 changed files with 143 additions and 34 deletions

View File

@@ -57,10 +57,14 @@ Proxy матчит сервисы по `Host` заголовку. Если PC on
- `POST /api/auth/login` — возвращает `{ token }` (UUID v4)
- `POST /api/auth/logout` — удаляет сессию
- `GET /api/auth/check` — проверяет, нужна ли auth и валиден ли токен
- Сессии in-memory (`Map`), теряются при рестарте
- Сессии in-memory (`Map`), TTL 24 часа, теряются при рестарте
- Rate limiting: 5 попыток / 15 мин на IP для `/api/auth/login`
- Auth middleware защищает `/api/*` кроме `/api/auth/*`
- WebSocket: токен через query `?token=...`
- Сервис-прокси (по Host) — без auth
- CORS: только same-origin + localhost (для dev)
- SSRF защита: service target не может указывать на localhost, metadata endpoints
- XSS защита: HTML-экранирование в waking page
## Деплой