wa-dev-tools/docs/sessions/2026-07-24-2348.md

53 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2026-07-24 23:48 — Аудит безопасности + снятие лимитов /compress, деплой на VPS
**Сделано:**
- **Снят лимит в `/compress` для админа** (без лимита размера/количества/rate-limit) — задеплоено на прод, работает.
- **Security-аудит всего сервиса** (4 code-reviewer агента): 6 CRITICAL, 9 HIGH, ~15 MEDIUM, 8 LOW + 36 npm-уязвимостей.
- **Исправлено и задеплоено на VPS 19 находок** (пакет 1 + пакет 2), проверено функционально.
- **Зафиксировано в git:** VPS локальный commit `18c9fd7` (снапшот прода), локаль + Gitea commit `626a28f`.
- Бэкапы всех правок на VPS: `*.bak-audit20260724` (пакет 1) и `*.bak-audit20260724b` (пакет 2), плюс `*.bak-20260724` (compress).
**Изменённые / созданные файлы (все на VPS-версиях, синхронизированы в локаль):**
- [lib/ssrf.js](../../lib/ssrf.js) — переписан: IPv6/mapped, A+AAAA, fail-closed, CGNAT
- [lib/ws.js](../../lib/ws.js) — авторизация на upgrade + maxPayload + owner-check при subscribe
- [lib/queue.js](../../lib/queue.js) — `user_id` в jobs + миграция ALTER TABLE + reaper зависших `processing`
- [lib/session.js](../../lib/session.js) — fail-fast без SESSION_SECRET/DB_PASSWORD
- [lib/admin.js](../../lib/admin.js) — admin-гейт сужен до `/frontend/`-ассетов
- [lib/logger.js](../../lib/logger.js) — ротация лога 5MB
- [routes/compress.js](../../routes/compress.js) — admin без лимитов; archiver `.on('error')`; SVG убран из sharp
- [routes/parser.js](../../routes/parser.js) — ревалидация редиректов; потоковое чтение 2MB; санитайз `javascript:`/`data:`
- [routes/httpclient.js](../../routes/httpclient.js) — ревалидация каждого редиректа
- [routes/redirects.js](../../routes/redirects.js) — ревалидация каждого хопа
- [routes/pdf.js](../../routes/pdf.js) — archiver `.on('error')`; dpi clamp 36-300; rate-limit на весь роутер
- [routes/svgeditor.js](../../routes/svgeditor.js) — `safeColor()` (XSS)
- [routes/video.js](../../routes/video.js) — rate-limit `/convert`; owner-check в `/convert` и `/progress`
- [routes/auth.js](../../routes/auth.js) — session fixation в register; dummy-hash против timing
- [routes/api.js](../../routes/api.js) — publicLimiter; скрыты сырые ошибки БД
- [server.js](../../server.js) — error-handler ПОСЛЕ AdminJS; `/health` публично только `{status:ok}`
- [public/compress.html](../../public/compress.html) — admin-детект (`/auth/me`), снятие клиентской отсечки
**Решения:**
- **Прод = VPS 195.140.146.84** (Docker-контейнер `wadevelop`), rpi4 — двойник. Деплой SFTP + `docker restart wadevelop` (см. скилл `/deploy-wadevelop`).
- Правки делались от **актуальных VPS-версий** файлов (скачаны в scratchpad), т.к. локаль/rpi4 расходятся с VPS.
- **CSP `unsafe-inline` НЕ трогали** — переход на nonce требует правки всех 21 HTML, риск сломать фронт непропорционален выигрышу.
- **DNS-rebinding pinning (HIGH-14) отложен** — нужен кастомный fetch-agent; сейчас закрыт fail-closed + ревалидацией.
- npm-зависимости не обновляли — отдельная задача с риском ломающих изменений.
**Открытые вопросы / следующие шаги:**
- [ ] **Проверить вручную под залогиненной сессией:** video-конвертация (прогресс через WS + owner-check не сломал легитимный поток).
- [ ] Полный DNS-rebinding pinning (HIGH-14) — кастомный fetch-agent/`request-filtering-agent`.
- [ ] Утечки `err.message` в pdf.js (~13 мест) → generic + лог.
- [ ] Обновить уязвимые npm-зависимости (sharp/ws/undici, 36 шт.) с прогоном.
- [ ] LOW: plaintext-пароль в payload admin.js new-action; prompt injection в api.js regex; утечка таймера в api.js.
- [ ] Свести две расходящиеся копии (VPS-прод vs rpi4-двойник) в один git; решить судьбу rpi4.
**Как продолжить (для чистой сессии):**
- Контекст: память `project-wa-dev-tools.md`, `server-195-140-146-84.md`. **Прод = VPS 195.140.146.84 / контейнер `wadevelop` / `/opt/sites/www/wadevelop.ru/`.** rpi4 — двойник, НЕ деплоить.
- Деплой: скилл `/deploy-wadevelop` (SFTP + `docker restart wadevelop`). SSH: `python3 C:/Users/tream/.claude/ssh_cmd.py root@195.140.146.84 "<cmd>"`.
- Проверка прода: `curl -s -o /dev/null -w "%{http_code}\n" https://wadevelop.ru/` (200); `docker logs wadevelop --tail 10`.
- Откат правок: бэкапы `*.bak-audit20260724*` в `/opt/sites/www/wadevelop.ru/` или `git reset` на VPS (снапшот `18c9fd7`).
**Ссылки:**
- Прод: https://wadevelop.ru — VPS 195.140.146.84 (FirstVDS, treamz.fvds.ru), контейнер `wadevelop`
- Git: Gitea rpi4:3002 `treamz/wa-dev-tools`, локаль на коммите `626a28f`; VPS-снапшот `18c9fd7`