harden anti-spam and file serving; backup restore to disk; json body limit

- Add honeypot field to public submission form + server-side check
- Serve shared files only in context of a valid share link (/api/share/:shareToken/files/:fileToken)
- Switch backup restore upload to diskStorage (50MB) with temp-dir cleanup
- Limit JSON body to 1mb
- Document fixed audit items
This commit is contained in:
dev
2026-09-08 11:36:34 +03:00
parent 57f2ea4f41
commit 8a50b46b7b
4 changed files with 81 additions and 18 deletions
+4 -5
View File
@@ -26,12 +26,11 @@ function requireAdmin(req, res, next) {
---
### 2. Файлы доступны анонимно по токену
**Файлы:** `server.js:877-885`, `server.js:49`
- `GET /api/files/:token` и статика `/uploads/*` отдают любой файл любому, кто знает токен.
- Токены криптостойкие (32 hex), но **фото детей и учебные проекты не должны быть публично доступны по угадываемому ключу**.
- Share-ссылки (`/api/share/:token`) также выдают все файлы записи.
**Статус:** 🟢 Частично исправлено (share-файлы привязаны к ссылке)
- ✅ Публичные share-файлы теперь отдаются **только** через `GET /api/share/:shareToken/files/:fileToken`, где проверяется принадлежность файла к записям активной ссылки (expiry, пароль, фильтры группы/имени/периода) — `server.js:612-647`.
- ⚠️ `GET /api/files/:token` и статика `/uploads/*` по-прежнему доступны по токену (нужны для админ-панели). Токены криптостойкие (16 байт hex).
**Рекомендация:** отдавать файлы только в контексте действующей share-ссылки (проверка принадлежности entry к ссылке) либо подписанные URL с TTL.
**Файлы:** `server.js:612-647`, `public/share.html:106-121`
---