5.7 KiB
5.7 KiB
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 commit626a28f. - Бэкапы всех правок на VPS:
*.bak-audit20260724(пакет 1) и*.bak-audit20260724b(пакет 2), плюс*.bak-20260724(compress).
Изменённые / созданные файлы (все на VPS-версиях, синхронизированы в локаль):
- lib/ssrf.js — переписан: IPv6/mapped, A+AAAA, fail-closed, CGNAT
- lib/ws.js — авторизация на upgrade + maxPayload + owner-check при subscribe
- lib/queue.js —
user_idв jobs + миграция ALTER TABLE + reaper зависшихprocessing - lib/session.js — fail-fast без SESSION_SECRET/DB_PASSWORD
- lib/admin.js — admin-гейт сужен до
/frontend/-ассетов - lib/logger.js — ротация лога 5MB
- routes/compress.js — admin без лимитов; archiver
.on('error'); SVG убран из sharp - routes/parser.js — ревалидация редиректов; потоковое чтение 2MB; санитайз
javascript:/data: - routes/httpclient.js — ревалидация каждого редиректа
- routes/redirects.js — ревалидация каждого хопа
- routes/pdf.js — archiver
.on('error'); dpi clamp 36-300; rate-limit на весь роутер - routes/svgeditor.js —
safeColor()(XSS) - routes/video.js — rate-limit
/convert; owner-check в/convertи/progress - routes/auth.js — session fixation в register; dummy-hash против timing
- routes/api.js — publicLimiter; скрыты сырые ошибки БД
- server.js — error-handler ПОСЛЕ AdminJS;
/healthпублично только{status:ok} - 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