密钥安全
严格的安全编码规则、零信任云存储模型,以及本地密钥保护机制。
Zero-Secret 策略
安全是 VibeBasket 的核心原则之一。已安装 MCP 服务使用的 OpenAI 或 GitHub API token 等敏感密钥不会经过 bundle 数据库,也不会被缓存到其中。
零信任云策略
Bundle manifest 永远不会包含终端用户的运行时密钥。托管应用会保存所选目录元数据,以及可选的已加密管理员备份存储凭据,但不会保存 MCP 或 agent 工具在运行时使用的 API 密钥。
相反,在本地 apply bundle 时,CLI 会解析目标所需的凭据键,并在本地终端中安全提示操作者注入这些值。托管应用不会看到这些运行时值。
之后的密钥处理取决于目标 adapter。大多数 IDE 需要在本地配置文件中写入内联 MCP env 或 header 值,因此 CLI 会在操作者机器上解析这些密钥,并且只写入那台机器的本地 IDE 配置。Codex 对远程 MCP 鉴权 header 属于部分例外:当其原生配置格式支持环境变量键引用时,VibeBasket 会优先写入引用,而不是把原始 token 序列化进 TOML。
速率限制
所有公开 API endpoint 都受到滑动窗口速率限制器的保护,带有按 IP 跟踪与自动垃圾回收。只有在自托管用户明确启用代理信任时,来自代理的 IP header 才会被信任。
| 端点 | 限制 |
|---|---|
| /api/health | 120/min |
| /api/catalog | 120/min |
| /api/auth/* | 60/min |
| /api/bundle/[id] | 60/min |
| /api/stacks | 30/min |
| /api/admin/stats | 30/min |
| /api/catalog/status | 5/min |
| /api/bundle POST | 20/min |
安全响应头
所有响应都附带加固后的安全响应头。在生产环境中,HTML 路由会收到基于 nonce 的 Content-Security-Policy,使 Next.js 能安全完成 hydration,而不会为大范围内联脚本执行打开缺口;同时整套部署都启用了 HSTS。
| 响应头 | 值 |
|---|---|
| X-Frame-Options | DENY |
| X-Content-Type-Options | nosniff |
| Referrer-Policy | strict-origin-when-cross-origin |
| X-Permitted-Cross-Domain-Policies | none |
| X-Download-Options | noopen |
| Permissions-Policy | camera=(), microphone=(), geolocation=() |
| Strict-Transport-Security | max-age=63072000; includeSubDomains; preload |
| Content-Security-Policy | default-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 认证会话之后。访问权限仅授予出现在 ADMIN_OAUTH_EMAILS 环境变量中的邮箱地址,而且只有已验证并加入 allowlist 的账户才会被提升为管理员。
| 功能 | 说明 |
|---|---|
| 目录同步 | 手动触发来自上游来源的 registry 同步。 |
| 备份管理 | 在任意已配置存储后端上创建、列出、下载并恢复数据库备份。 |
| FTS5 索引健康 | 将全文搜索索引行数与目录表进行比对,以验证完整性。 |
| 数据库健康检查 | 运行数据库完整性诊断并尽早发现损坏。 |
| 强制清理 | 清理过期 bundle、陈旧 session、验证 token 和旧 sync 记录,然后执行 vacuum。 |
| 用户概览 | 查看注册用户数量、已保存 Stack 遥测数据和流行度排行榜。 |
| 管理员邮箱 | 配置以逗号分隔、持久化为站点配置的管理员邮箱 allowlist。 |
所有管理员操作都只在服务端执行,并且需要已验证的管理员会话。/api/admin/stats endpoint 的速率限制为每分钟 30 次请求。