2.8 KiB
2.8 KiB
Changelog — Settings 页面巡检 + Telegram Bot Token 脱敏
日期: 2026-05-30
类型: 安全修复 + 功能验证
涉及文件:
server/api/settings.py— SENSITIVE_KEYS 加入 telegram_bot_token + reveal-token 端点web/app/settings.html— Telegram 区域独立渲染 + Bot Token 脱敏 UI
变更摘要
1. Telegram Bot Token 脱敏 (安全修复)
问题: GET /api/settings/ 以明文返回 Bot Token 8743165040:AAH_YGffcj2mdqSAx1sHXjspvUFzJ_kVC2I,违反安全铁律(API 响应不得返回敏感凭据明文)。
修复:
- 后端
SENSITIVE_KEYS新增telegram_bot_token,GET 响应返回脱敏值87431650... - 新增
POST /api/settings/telegram/reveal-token端点(密码验证 + 审计日志) - 前端 Telegram 区域从通用 SECTIONS 循环中分离,单独渲染:
- Bot Token 默认脱敏显示 + 「显示」按钮(需密码验证)
- 验证后切换为 password 类型输入框 + 显示/隐藏切换
- Chat ID 保持正常编辑(非敏感信息)
2. Settings 页面功能巡检结果
| 功能 | 状态 | 备注 |
|---|---|---|
| 品牌设置保存 | ✅ 正常 | PUT system_name → 200 |
| 告警阈值保存 | ✅ 正常 | PUT cpu_alert_threshold → 200 + 热更新 |
| 通知 toggle 开关 | ✅ 正常 | 乐观 UI 更新 + API 同步 |
| 手动 IP 添加/删除 | ✅ 正常 | POST + DELETE → 200 |
| IP 白名单开关 | ✅ 正常 | confirm 弹窗 + toggle |
| 订阅地址保存 | ✅ 正常 | 触发后台刷新 |
| Telegram Chat ID 检测 | ✅ 正常 | getUpdates → 2 个对话 |
| 不可变 Key 拒绝 | ✅ 正常 | PUT api_key → 403 |
| TOTP 状态显示 | ✅ 正常 | 已启用卡片 + 重新绑定/禁用按钮 |
| Bot Token 脱敏 | ✅ 正常 | 87431650... + 显示按钮 |
| API Key 脱敏+复制 | ✅ 正常 | de3a155d... + 显示/复制 |
| 订阅 IP 显示 | ✅ 正常 | 6 个节点 IP |
| 手动 IP 空状态 | ✅ 正常 | 显示「(空)」 |
| 告警通知 8 项 toggle | ✅ 正常 | 全部可切换 |
3. 已排除的假问题
- heartbeat_timeout 映射: 已存在于 DB_OVERRIDE_MAP (config.py:115),Task 2 关闭
- 手动 IP 与订阅 IP 重叠: 旧页面缓存(ip-allowlist 路由修复前),刷新后正常
- 「等待首次刷新...」: 服务重启后时序问题,refresh 完成后刷新页面正常显示
动机
安全审计发现 Telegram Bot Token 明文暴露,需要与 API_KEY/SECRET_KEY 同等级别保护。
是否需迁移/重启
- 需要重启后端服务(新增 API 端点 + SENSITIVE_KEYS 变更)
验证方式
GET /api/settings/→ telegram_bot_token 值为87431650...POST /api/settings/telegram/reveal-token+ 密码 → 返回完整 token- 前端 settings 页面 → Bot Token 显示脱敏 + 「显示」按钮可正常揭示
- ruff check → 0 errors