---
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`） |
| 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` 可追溯
