Обзор кода MemBox: отполированный memory API и незапертые двери дашборда
MemBox сочетает REST-память, файлы, поиск, TTL, snapshots, webhooks, shares, analytics и GitHub storage. Build проходит, но dashboard routes раскрывают токены и destructive actions без auth.

DEEP PROJECT REVIEW · SOURCE + LIVE PREVIEW
Превью на Vercel выглядит готовым для клиентов: вводишь имя, получаешь endpoint, загружаешь файлы, отдаёшь агенту bearer-токен. За аккуратной страницей стоит куда больший репозиторий: 11 079 строк TypeScript/TSX, 22 файла API-маршрутов, пять языков интерфейса, два режима хранения, ссылки для обмена, снимки, webhooks, аналитика, пакетные вызовы, TTL, полнотекстовый поиск и «мозг» на GitHub. А потом обзор добирается до маршрутов дашборда. Несколько из них отдают приватные записи box или удаляют box, не проверив, кто спрашивает. Эта находка меняет вердикт.
Сильные стороны
- Простой REST для любого HTTP client
- GitHub persistence и AES-GCM для пользовательского PAT
- Пять языков, включая корректный RTL
Критические риски
- Routes без auth раскрывают tokens, files, previews и delete
- Login и box tokens лежат plaintext
- Лимиты 1 MB и 500 MB не enforced в upload
Как это устроено
Next.js 16 обслуживает UI и routes. Prisma хранит metadata в SQLite; тела файлов идут в filesystem или GitHub Contents API. Central repo несёт DB checkpoints, share mirrors и pairing records для serverless recovery.
Что он умеет
API умеет upsert, append, чтение, список, удаление, multipart-загрузку, бинарные скачивания, поиск, пакеты, TTL, снимки, ссылки на чтение и запись, webhooks и аналитику. Дашборд добавляет регистрацию, вход по токену, файловый браузер и сопряжение с GitHub.
| Layer | Reviewed implementation | Finding |
|---|---|---|
| Agent API | Bearer + share tokens | Read/write split exists |
| Dashboard API | Box and file routes | Authentication gaps |
| Storage | Local FS + GitHub | Flexible, operationally complex |
| Quality | Build, lint, audit | Build passes; lint and audit need work |
Где контроль доступа держится, а где нет
Agent routes обычно требуют box/share token и разделяют read/write. Есть path cleaning, allowlist GitHub keys и symlink containment. Но `/api/boxes` list возвращает records с master token по одному username. GET box и file preview не требуют auth, DELETE box тоже. Это critical broken access control.
Граница bearer-токена настолько прочна, насколько защищён самый слабый маршрут, а здесь эндпоинты дашборда обходят её.
Риски данных и платформы
Random 32-byte tokens хранятся напрямую, query-token может попасть в history/logs. Webhook URL принимается без private-network block, что создаёт SSRF risk. In-memory rate limit не глобален в serverless.
Что обещают документы и что делает код
UI обещает 1 MB storage и 500 MB/file, но multipart route читает весь файл в Buffer и не проверяет caps. Primary demo expired; Vercel preview работает, но data там ephemeral.
Собирается ли он, проходит ли линтер и тесты
Build проходит с filesystem tracing warnings. Lint падает на шести React errors. Test suite нет. Production audit показал девять advisories: пять high и четыре moderate.
Как он выглядит и звучит
Dark UI с emerald accent, ясным hero и быстрым REST story выглядит профессионально. Но “No limits” конфликтует с “1 MB free,” а 500 MB не enforced.
Что чинить первым
Закройте dashboard routes session/login token, не сериализуйте master tokens, hash secrets, enforce size до Buffer, block private webhook targets, sign webhooks, shared rate limits, integration auth tests и обязательный CI.
Вердикт
Продуктовая форма сильная, preview красивый. Но важные данные доверять нельзя, пока dashboard API обходит token boundary. Сначала authorization.
FAQ
Что такое MemBox?
Открытый REST API памяти и файлов для AI-агентов с поиском, снимками, TTL, общим доступом, webhooks, аналитикой и хранением в GitHub.
Работает ли demo?
Vercel preview работает; основной membox.space-z.ai сейчас expired.
Готов ли к sensitive data?
Нет. Routes без auth могут раскрыть tokens и удалить boxes.
Ссылки и автор
Рабочее превью на Vercel · Основное демо (на момент проверки истекло) · Исходный код
Reviewed source at commit e8e53b5 · Build and audit reproduced 2026-09-21