Documentación/Seguridad de secretos

Seguridad de secretos

Reglas estrictas de secure coding, modelos zero-trust para almacenamiento en la nube y mecanismos locales de protección de secretos.

Política zero-secret

La seguridad es una directriz principal de VibeBasket. Las claves sensibles, como los tokens de OpenAI o GitHub API usados por los MCP instalados, nunca transitan ni se almacenan en caché dentro de la base de datos de bundles.

Política zero-trust en la nube

Los manifiestos de bundle nunca contienen secretos de runtime del usuario final. La app alojada guarda metadatos del catálogo seleccionado y, opcionalmente, credenciales cifradas del almacenamiento de backups para administración, pero no las claves API que los MCP o herramientas agent usan en runtime.

En su lugar, al aplicar un bundle en local, el CLI analiza las claves de credenciales del destino y pide al operador, dentro del terminal local, que las inyecte de forma segura. La app alojada nunca ve esos valores de runtime.

A partir de ahí, la gestión de secretos depende del adaptador de destino. La mayoría de IDEs exige valores MCP inline en env o headers dentro de archivos locales de configuración, así que el CLI resuelve esos secretos en la máquina del operador y los escribe solo en la configuración local de ese IDE. Codex es una excepción parcial para los headers de auth de MCP remotos: cuando su formato nativo soporta una referencia a una clave de entorno, VibeBasket prefiere esa referencia en lugar de serializar el token en TOML.

Limitación de tasa

Todos los endpoints públicos de la API están protegidos por un rate limiter de ventana deslizante con seguimiento por IP y recolección automática. Las cabeceras IP derivadas de proxy solo se consideran fiables cuando quien autoaloja habilita explícitamente la confianza en proxy.

Límites de tasa de endpoints de la API
EndpointLímite
/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

Cabeceras de seguridad

Todas las respuestas incluyen cabeceras endurecidas. En producción, las rutas HTML reciben una Content-Security-Policy basada en nonce para que Next.js pueda hidratar con seguridad sin abrir la puerta a la ejecución masiva de scripts inline, y HSTS se aplica en todo el despliegue.

Cabeceras de respuesta de seguridad
CabeceraValor
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'

Seguridad del panel de administración

El panel de administración en /admin está protegido por sesiones autenticadas con OAuth. El acceso se restringe a direcciones de correo listadas en la variable de entorno ADMIN_OAUTH_EMAILS , y solo las cuentas verificadas incluidas en la allowlist reciben rol de admin.

Controles de seguridad del panel admin
FunciónDescripción
Sync del catálogoLanza manualmente la sincronización del registry desde fuentes upstream.
Gestión de backupsCrea, lista, descarga y restaura backups de la base de datos en cualquier backend de almacenamiento configurado.
Salud del índice FTS5Verifica el recuento del índice de búsqueda full-text frente a la tabla del catálogo para asegurar integridad.
Chequeo de BDEjecuta diagnósticos de integridad de la base de datos y detecta corrupción de forma temprana.
Limpieza forzadaElimina bundles caducados, sesiones obsoletas, tokens de verificación y registros antiguos de sync, y después ejecuta vacuum.
Resumen de usuariosInspecciona los recuentos de usuarios registrados, la telemetría de stacks guardados y los rankings de popularidad.
Correos adminConfigura la allowlist persistida de correos admin separada por comas.

Todas las acciones de administración se ejecutan solo del lado del servidor y requieren una sesión de administrador verificada. El endpoint /api/admin/stats está limitado a 30 solicitudes por minuto.