Документация/Безопасность секретов

Безопасность секретов

Строгие правила secure coding, zero-trust модель облачного хранения и механизмы защиты локальных секретов.

Zero-Secret Policy

Безопасность — один из базовых принципов VibeBasket. Чувствительные ключи вроде OpenAI или GitHub API tokens, которые используют установленные MCP-серверы, никогда не проходят через базу bundle’ов и не кэшируются в ней.

Zero-Trust Cloud Policy

Bundle manifest’ы никогда не содержат runtime-секреты конечного пользователя. Hosted-приложение хранит выбранные метаданные каталога и, при необходимости, зашифрованные admin credentials для backup storage, но не API keys, которые MCP или agent tools используют во время работы.

Вместо этого при локальном apply bundle CLI анализирует credential keys цели и безопасно запрашивает их у оператора прямо в локальном терминале. Hosted-приложение никогда не видит эти runtime-значения.

Дальнейшая обработка secret’ов зависит от целевого адаптера. Большинству IDE нужны inline MCP env или header values в локальных конфиг-файлах, поэтому CLI разрешает эти secrets на машине оператора и записывает их только в локальный IDE config этой машины. Codex — частичное исключение для auth headers удалённых MCP: когда нативный config format поддерживает ссылку на environment-key, VibeBasket предпочитает её, а не сериализацию raw token в TOML.

Rate limiting

Все публичные API endpoints защищены sliding-window rate limiter’ом с per-IP tracking и автоматической очисткой. Proxy-derived IP headers считаются доверенными только если self-hoster явно включает proxy trust.

Лимиты API endpoints
EndpointЛимит
/api/health120/min
/api/catalog120/min
/api/auth/*60/min
/api/bundle/[id]60/min
/api/stacks30/min
/api/admin/stats30/min
/api/catalog/status5/min
/api/bundle POST20/min

Security headers

Все ответы содержат усиленные security headers. В production HTML routes получают nonce-based Content-Security-Policy, чтобы Next.js мог безопасно гидратироваться без открытия двери для массового исполнения inline-скриптов, а HSTS применяется на всём deployment.

Security response headers
HeaderValue
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
Referrer-Policystrict-origin-when-cross-origin
X-Permitted-Cross-Domain-Policiesnone
X-Download-Optionsnoopen
Permissions-Policycamera=(), microphone=(), geolocation=()
Strict-Transport-Securitymax-age=63072000; includeSubDomains; preload
Content-Security-Policydefault-src 'self'; script-src 'self' 'nonce-<request-nonce>' 'strict-dynamic' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; object-src 'none'; manifest-src 'self'; frame-ancestors 'none'

Безопасность админ-панели

Админ-панель на /admin защищена OAuth-authenticated sessions. Доступ ограничен адресами из переменной окружения ADMIN_OAUTH_EMAILS , и только подтверждённые email’ы из allowlist получают роль администратора.

Контроли безопасности админ-панели
ФункцияОписание
Catalog SyncВручную запускает синхронизацию registry из upstream-источников.
Backup MgmtСоздаёт, показывает, скачивает и восстанавливает backup’ы базы данных в любом настроенном storage backend.
FTS5 Index HealthСверяет количество строк в индексе full-text search с таблицей каталога для проверки целостности.
DB Health CheckЗапускает проверки целостности базы данных и помогает рано обнаружить corruption.
Force CleanupУдаляет просроченные bundle’ы, stale sessions, verification tokens и старые sync records, затем выполняет vacuum.
User OverviewПоказывает количество зарегистрированных пользователей, телеметрию saved stacks и рейтинг популярности.
Admin EmailsНастраивает allowlist админских email’ов, сохранённый в site config в формате comma-separated.

Все admin actions выполняются только на server-side и требуют подтверждённой admin session. Для endpoint’а /api/admin/stats действует лимит 30 запросов в минуту.