44e77dcb0e
**重构前**(旧编号 02-11): - docs/02-产品需求/ → 00 产品规划/PRD - docs/03-技术架构/ → 01-05 子目录散落 - docs/04-原型设计/ → 01-02 产品设计(HTML 原型) - docs/05-原型设计/ → screens/ - docs/06-测试素材/ → 02-E2E / 03-功能 / 04-版本测试 - docs/07-项目管理/ → 任务说明书/日报/计划 - docs/08-安全审计/ → 审计报告 - docs/09-堡垒运维/ → toolbox / deploy - docs/10-项目管理/ → 任务说明书(重复) - docs/11-历史归档/ → deploy-nas-archived **重构后**(新编号 00-07,语义化): - docs/00-产品开发流程与文档管理规范.md - docs/00-版本迭代总览.md - docs/01-产品文档/ (PRD/原型/认证/会话/AI 服务/坐席/集成) - docs/02-技术文档/ (技术方案/架构图/重构记录/前端改造/实现配置) - docs/03-测试文档/ (E2E/功能用例/版本报告/缺陷单) - docs/04-运维文档/ (部署运维/运维指南) - docs/05-运营文档/ (品牌推广/用户手册) - docs/06-安全审计/ (审计报告) - docs/07-项目管理/ (任务说明书/日报/计划/看板) **净收益**: - 目录编号与产品文档管理规范对齐(按文档阶段 01-07 编号) - 消除 02-产品需求 与 10-项目管理 的编号重叠 - 子目录按文档类型分组(如 01-产品文档/00-产品规划、01-产品文档/01-认证与登录) - 把运维/安全/项目管理从 0X 散落改为 04/06/07 合计 494 文件 + 78495 行 / - 14076 行
220 lines
5.8 KiB
Markdown
220 lines
5.8 KiB
Markdown
# 智能IT支持服务台 — 安全审计报告
|
||
|
||
> **编制日期**: 2026-06-14
|
||
> **版本**: v1.0
|
||
|
||
---
|
||
|
||
## 1. 系统概述
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 系统名称 | 智能IT支持服务台 |
|
||
| 部署环境 | 企业内网 (10.90.5.110) |
|
||
| 访问方式 | 企微工作台应用 / HTTPS |
|
||
| 用户规模 | ~6000人 |
|
||
|
||
---
|
||
|
||
## 2. 安全架构
|
||
|
||
### 2.1 认证与授权
|
||
|
||
| 特性 | 实现方式 | 状态 |
|
||
|------|----------|------|
|
||
| **身份认证** | 企微OAuth2 + JWT Token | ✅ 已实现 |
|
||
| **OTP双因素** | TOTP (Google Authenticator) | ✅ 已实现 |
|
||
| **角色权限** | RBAC (user/agent/admin) | ✅ 已实现 |
|
||
| **会话管理** | Redis Token + 过期时间 | ✅ 已实现 |
|
||
| **密码策略** | 企微账户策略 | ✅ 依赖企微 |
|
||
|
||
### 2.2 网络安全
|
||
|
||
| 特性 | 实现方式 | 状态 |
|
||
|------|----------|------|
|
||
| **HTTPS** | Nginx SSL终止 | ✅ 已配置 |
|
||
| **CORS** | 白名单域名 | ✅ 已配置 |
|
||
| **IP白名单** | Nginx allow/deny | ⚠️ 待配置 |
|
||
| **API限流** | Nginx rate_limit | ⚠️ 待配置 |
|
||
| **WAF** | 腾讯WAF | ✅ 已接入 |
|
||
|
||
### 2.3 数据安全
|
||
|
||
| 特性 | 实现方式 | 状态 |
|
||
|------|----------|------|
|
||
| **数据库** | PostgreSQL (内网) | ✅ 已实现 |
|
||
| **传输加密** | TLS 1.2+ | ✅ 已配置 |
|
||
| **敏感脱敏** | 日志脱敏 | ⚠️ 待实现 |
|
||
| **备份策略** | 定时备份 | ⚠️ 待配置 |
|
||
| **加密存储** | 字段加密 | ❌ MVP不考虑 |
|
||
|
||
### 2.4 应用安全
|
||
|
||
| 特性 | 实现方式 | 状态 |
|
||
|------|----------|------|
|
||
| **SQL注入** | SQLAlchemy ORM | ✅ 已防护 |
|
||
| **XSS** | 前端转义 | ✅ 已实现 |
|
||
| **CSRF** | JWT Token | ✅ 已防护 |
|
||
| **文件上传** | 类型限制 + 存储隔离 | ✅ 已实现 |
|
||
| **API认证** | Token验证 | ✅ 已实现 |
|
||
|
||
---
|
||
|
||
## 3. 审计日志
|
||
|
||
### 3.1 已记录事件
|
||
|
||
| 事件 | 记录位置 | 状态 |
|
||
|------|----------|------|
|
||
| 登录/登出 | 日志 | ✅ |
|
||
| 消息发送 | 数据库 + 日志 | ✅ |
|
||
| 会话创建/关闭 | 数据库 + 日志 | ✅ |
|
||
| 管理员操作 | 日志 | ✅ |
|
||
| 配置变更 | 数据库 | ✅ |
|
||
|
||
### 3.2 待记录事件
|
||
|
||
| 事件 | 优先级 | 说明 |
|
||
|------|--------|------|
|
||
| **敏感数据查询** | P1 | 查询用户信息、联系方式 |
|
||
| **角色变更** | P1 | 管理员分配权限 |
|
||
| **系统配置变更** | P1 | 功能开关、集成配置 |
|
||
| **API调用统计** | P2 | 接口调用频率 |
|
||
| **异常登录** | P1 | 异地登录、频繁失败 |
|
||
|
||
---
|
||
|
||
## 4. 安全检查项
|
||
|
||
### 4.1 MVP必须通过
|
||
|
||
| # | 检查项 | 当前状态 | 建议 |
|
||
|---|--------|----------|------|
|
||
| 1 | 企微OAuth2认证 | ✅ | - |
|
||
| 2 | JWT Token有效期 | ✅ 2小时 | - |
|
||
| 3 | OTP绑定/验证 | ✅ | - |
|
||
| 4 | 角色权限控制 | ✅ | - |
|
||
| 5 | 数据库内网访问 | ✅ | - |
|
||
| 6 | HTTPS全站加密 | ✅ | - |
|
||
| 7 | 日志脱敏 | ⚠️ | 上线前完成 |
|
||
| 8 | IP访问限制 | ⚠️ | 上线前完成 |
|
||
|
||
### 4.2 生产建议项
|
||
|
||
| # | 检查项 | 优先级 | 说明 |
|
||
|---|--------|--------|------|
|
||
| 9 | API限流 | P2 | 防DDoS |
|
||
| 10 | 操作审计日志 | P2 | 合规要求 |
|
||
| 11 | 数据库定时备份 | P2 | 灾备 |
|
||
| 12 | 入侵检测 | P3 | 长期 |
|
||
|
||
---
|
||
|
||
## 5. 消息状态功能(待实现)
|
||
|
||
### 5.1 需求
|
||
|
||
| 功能 | 说明 | 优先级 |
|
||
|------|------|--------|
|
||
| 已读未读状态 | 每条消息独立跟踪已读/未读 | P2 |
|
||
| 已读时间戳 | 记录何时已读 | P2 |
|
||
| 已读回执推送 | WS实时推送已读状态 | P2 |
|
||
| 未读计数 | 会话未读消息数 | P2 |
|
||
|
||
### 5.2 现有代码
|
||
|
||
```python
|
||
# 当前 Message 模型
|
||
is_read: bool # 单字段,只能记录"是否已读"
|
||
```
|
||
|
||
问题:多用户场景下无法区分用户独立已读状态
|
||
|
||
### 5.3 实现方案
|
||
|
||
```python
|
||
# 新增 MessageStatus 表
|
||
class MessageStatus(Base):
|
||
message_id: str
|
||
user_id: str # 读取者ID
|
||
user_type: str # employee/agent
|
||
status: Enum # sent/delivered/read
|
||
read_at: datetime
|
||
```
|
||
|
||
### 5.4 API设计
|
||
|
||
| API | 方法 | 说明 |
|
||
|-----|------|------|
|
||
| `/api/messages/{id}/read` | PUT | 标记消息已读 |
|
||
| `/api/messages/{id}/status` | GET | 获取消息状态 |
|
||
| `/api/conversations/{id}/unread-count` | GET | 未读计数 |
|
||
|
||
---
|
||
|
||
## 6. 风险评估
|
||
|
||
| 风险 | 等级 | 缓解措施 |
|
||
|------|------|----------|
|
||
| 企微API限制 | 中 | 保持降级通道 |
|
||
| 内网暴露面 | 中 | IP白名单 |
|
||
| 社工攻击 | 低 | OTP + 安全培训 |
|
||
| 数据泄露 | 低 | 内网 + HTTPS |
|
||
|
||
---
|
||
|
||
## 7. 架构优化(2026-06-14 讨论)
|
||
|
||
### 7.1 高可用方案
|
||
|
||
| 特性 | 状态 | 说明 |
|
||
|------|------|------|
|
||
| restart: unless-stopped | ✅ 已配置 | 容器崩溃自动重启 |
|
||
| healthcheck 后端 | ✅ 已配置 | curl /health |
|
||
| healthcheck nginx | ✅ 已配置 | curl /itdesk/health |
|
||
| healthcheck postgres | ✅ 已配置 | pg_isready |
|
||
| healthcheck redis | ✅ 已配置 | redis-cli ping |
|
||
|
||
### 7.2 AI Gateway 设计
|
||
|
||
| 特性 | 状态 | 说明 |
|
||
|------|------|------|
|
||
| 内部抽象 | ⚠️ 待实现 | 抽离 AI 层为 Gateway |
|
||
| 多模型支持 | ⚠️ 待实现 | dify/wingman/其他 |
|
||
| 热切换 | ⚠️ 待实现 | 配置化切换 |
|
||
| 降级机制 | ⚠️ 待实现 | 失败自动切换 |
|
||
|
||
设计目标:
|
||
- 统一入口,支持 dify/wingman/其他模型
|
||
- 配置化启用/禁用,无需改代码
|
||
- 失败自动降级到备用模型
|
||
|
||
---
|
||
|
||
## 8. 结论
|
||
|
||
### 8.1 MVP可上线条件
|
||
|
||
- [x] 企微OAuth2认证
|
||
- [x] OTP双因素
|
||
- [x] 角色权限
|
||
- [x] HTTPS
|
||
- [x] Docker健康检查+自动重启
|
||
- [ ] 日志脱敏(上线前完成)
|
||
- [ ] IP访问限制(上线前完成)
|
||
- [ ] AI Gateway(V2前完成)
|
||
|
||
### 8.2 下一步行动
|
||
|
||
| 行动 | 负责人 | 截止 | 状态 |
|
||
|------|--------|------|------|
|
||
| 日志脱敏 | 开发 | 上线前 | pending |
|
||
| IP白名单 | 运维 | 上线前 | pending |
|
||
| AI Gateway | 开发 | V2前 | pending |
|
||
| 消息状态功能 | 开发 | V2 | pending |
|
||
|
||
---
|
||
|
||
> **编制人**: 宋献
|
||
> **审核人**: 待定
|
||
> **更新日期**: 2026-06-14 |