Files
Nexus/docs/audit/2026-06-10-rdp-hosts-standalone.md
T
Nexus Agent f127f07ab2 feat(rdp): 3389 页独立管理 RDP 主机
rdp_hosts 表与专用 API,在 3389远程页添加/连接,不再依赖子机列表。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 20:58:46 +08:00

2.5 KiB
Raw Blame History

审计 — 3389 独立 RDP 主机(rdp_hosts

Changelog: docs/changelog/2026-06-10-rdp-hosts-standalone.md

变更文件

文件 说明
server/domain/models/__init__.py RdpHost 模型
server/infrastructure/database/migrations.py rdp_hosts
server/infrastructure/database/rdp_host_repo.py 仓储
server/api/rdp_hosts.py CRUD + connect REST
server/api/rdp.py WS /ws/rdp/hosts/{host_id}
server/main.py 注册 rdp_hosts_router
frontend/src/pages/RdpPage.vue 列表/添加/连接
frontend/src/components/rdp/RdpHostFormDialog.vue 添加/编辑对话框
frontend/src/composables/rdp/useRdpHostList.ts 列表与 CUD
frontend/src/composables/rdp/useRdpSession.ts 改连 rdp_hosts
frontend/src/components/servers/ServerFormDialog.vue 移除 RDP 区块
frontend/src/composables/servers/useServerFormDialog.ts 移除 rdp 字段
frontend/src/pages/ServersPage.vue 移除 RDP 跳转
tests/test_rdp_hosts.py 模型/端口单测

入口表

方法 路径 鉴权 说明
GET /api/rdp/hosts/ admin JWT 列表(无密码)
POST /api/rdp/hosts/ admin JWT + 审计 创建,密码 Fernet
PUT /api/rdp/hosts/{id} admin JWT + 审计 更新
DELETE /api/rdp/hosts/{id} admin JWT + 审计 删除
GET /api/rdp/hosts/{id}/connect admin JWT 返回明文密码供 Guacamole
WS /ws/rdp/hosts/{id}?token= access JWT guacd 透明桥

Step 3(规则扫描)

规则 结论 说明
鉴权 PASS 全部 REST/WS 需管理员 JWT
IDOR PASS(平台模型) 与终端一致:管理员可连任意 RDP 主机
密钥落库 PASS password 列 Fernet;列表仅 password_set
明文 connect RISK 接受 Guacamole 客户端必需;HTTPS
CUD 审计 PASS create/update/delete_rdp_host
guacd PASS 仍仅内网侧车
静默吞错 PASS API HTTPExceptionWS close code

Closure(走读)

文件 结论
rdp_hosts.py SAFE — 名称唯一 IntegrityError→409connect 校验 guacd
rdp_host_repo.py SAFE — 标准 CRUD
rdp.py SAFE — host 存在性校验后桥接
RdpPage.vue SAFE — 无 v-html;添加后 host_id 连接
useRdpHostList.ts SAFE — formatApiError

DoD

  • changelog + 本审计
  • local_verify + type-check
  • 生产部署与浏览器验收