--- description: Nexus 安全规范 — JWT/TOTP/API Key/Fernet/CORS;MCP MySQL 只读 globs: server/api/**,server/application/**,server/infrastructure/database/**,web/app/** alwaysApply: false --- # Nexus 安全 ## 认证矩阵 | 调用方 | 机制 | |--------|------| | 管理端 API | JWT Bearer + 可选 TOTP | | Agent | `X-API-Key`(仅 per-server `agent_api_key`;经 `POST /api/servers/{id}/agent-key` 生成,BL-06 起无 global 回退) | | WebSocket | JWT query param | | 安装向导 | 无 JWT(仅安装模式可用) | ## 登录防暴破 - `auth_service.py`:失败计数 → 15min 锁定 → HTTP 429 - 刷新令牌重用检测:旧 refresh 作废、`token_version` 递增 ## 密钥(禁改 / 禁提交) - `.env` 永不入 git;`SECRET_KEY` / `API_KEY` / `ENCRYPTION_KEY` / `DATABASE_URL` 不可从 settings 表覆盖 - UI 不展示可改的 `API_KEY` ## 运维信任模型 - 鉴权管理员即信任用户,不做 RBAC - 必须防御:SQL/命令注入、XSS、凭据泄露 - Shell:`shlex.quote()`;DELETE/UPDATE 须有 WHERE(MCP 同样) ## Cursor MySQL MCP - 使用 `@yclenove/mysql-mcp-server`,**默认 `MYSQL_READONLY=true`** - `MYSQL_DATABASE_ALLOWLIST=nexus`(或实际库名) - 禁止在 MCP `env` 或 git 中提交生产密码;连接信息仅写在本地 `.env` - 查库优先 MCP `query` / `describe_table`,避免手写破坏性 SQL ## 审计 - 所有 CUD 写 `audit_logs`(含 `ip_address`) - WebSSH 会话与 `command_logs` 可追溯