docs: Monaco IDE编辑器 changelog + 审计报告
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# 审计记录 — Monaco IDE 编辑器 + 文件管理增强
|
||||
|
||||
## 审计信息
|
||||
|
||||
- **日期**: 2026-05-30
|
||||
- **审计人**: Claude (AI) + 用户确认
|
||||
- **触发原因**: Monaco 编辑器 + IDE 重构 + 文件管理增强
|
||||
|
||||
## 审计范围
|
||||
|
||||
| 文件 | 行数 | 状态 |
|
||||
|------|------|------|
|
||||
| web/app/files.html | 870 | ☑ 已审 |
|
||||
| web/app/terminal.html | 831 | ☑ 已审 |
|
||||
| web/app/servers.html | 1202 | ☑ 已审 |
|
||||
|
||||
## 审计8步结果
|
||||
|
||||
### Step 1: 登记 ✅
|
||||
### Step 2: 全文Read ✅
|
||||
### Step 3: 规则扫描H — 30 项
|
||||
### Step 4: Closure表
|
||||
|
||||
| H-xx | 严重度 | Closure | 说明 |
|
||||
|------|--------|---------|------|
|
||||
| H-01 | MEDIUM | **FINDING→已修** | esc() 加引号转义 |
|
||||
| H-02 | MEDIUM | **FINDING→已修** | initialPath 路径白名单 |
|
||||
| H-03 | LOW | **FINDING→已修** | doNewFile 文件名白名单 |
|
||||
| H-04 | N/A | FALSE_POSITIVE | WebSocket 认证完整 |
|
||||
| H-05 | N/A | FALSE_POSITIVE | JWT 保护完备 |
|
||||
| H-06 | N/A | FALSE_POSITIVE | innerHTML XSS 已防护 |
|
||||
| H-07 | - | ACCEPTED_RISK | 路径穿越(管理员上下文) |
|
||||
| H-08 | LOW | **FINDING** | Monaco CDN 无 SRI(已知限制) |
|
||||
| H-09 | N/A | FALSE_POSITIVE | 敏感数据脱敏正确 |
|
||||
| H-10 | N/A | FALSE_POSITIVE | URL 参数 parseInt 安全 |
|
||||
| H-11 | N/A | FALSE_POSITIVE | JWT 天然 CSRF 免疫 |
|
||||
| H-12 | - | ACCEPTED_RISK | CSP 需 Nginx 层配置 |
|
||||
| H-13 | MEDIUM | **FINDING→已修** | 移除 modalTextarea 引用 |
|
||||
| H-14 | - | FALSE_POSITIVE | 事件委托竞态合理 |
|
||||
| H-15 | N/A | FALSE_POSITIVE | 选择状态一致 |
|
||||
| H-16 | N/A | FALSE_POSITIVE | 边界检查完备 |
|
||||
| H-17 | LOW | ACCEPTED_RISK | Ctrl+S 并发保存 |
|
||||
| H-18 | - | ACCEPTED_RISK | 预加载空 catch 合理 |
|
||||
| H-19 | N/A | FALSE_POSITIVE | Monaco 防重复加载正确 |
|
||||
| H-20 | LOW | **FINDING→已修** | initialPath 仅首次连接 cd |
|
||||
| H-21 | LOW | ACCEPTED_RISK | esc() DOM 操作频繁 |
|
||||
| H-22 | N/A | FALSE_POSITIVE | 预加载有上限保护 |
|
||||
| H-23 | LOW | ACCEPTED_RISK | Monaco 内存 |
|
||||
| H-24 | LOW | ACCEPTED_RISK | 全量重渲染 |
|
||||
| H-25 | N/A | FALSE_POSITIVE | innerHTML 批量赋值正确 |
|
||||
| H-26 | MEDIUM | **FINDING→已修** | esc() 跨文件一致性 |
|
||||
| H-27 | N/A | FALSE_POSITIVE | _modalResolve 正确 |
|
||||
| H-28 | LOW | ACCEPTED_RISK | modal 关闭状态清理 |
|
||||
| H-29 | N/A | FALSE_POSITIVE | esc() HTML 上下文安全 |
|
||||
| H-30 | LOW | **FINDING→已修** | esc() 注释更新 |
|
||||
|
||||
### Step 5: 入口表 ✅
|
||||
### Step 6: 输入→Sink ✅
|
||||
### Step 7: 归类
|
||||
|
||||
```
|
||||
web/app/files.html 870行 12H 5FINDING → 0FINDING
|
||||
web/app/terminal.html 831行 4H 2FINDING → 0FINDING
|
||||
web/app/servers.html 1202行 1H 0FINDING
|
||||
──────────────────────────────────────────────────────────────
|
||||
总计 8 FINDING → 0FINDING (1 ACCEPTED_RISK H-08)
|
||||
```
|
||||
|
||||
### Step 8: DoD ✅
|
||||
|
||||
## FINDING 列表
|
||||
|
||||
| 编号 | 严重度 | 描述 | 修复方式 |
|
||||
|------|--------|------|----------|
|
||||
| H-01 | MEDIUM | esc() onclick XSS | 加 `'` `"` 转义 |
|
||||
| H-02 | MEDIUM | initialPath 命令注入 | 路径白名单正则 |
|
||||
| H-03 | LOW | doNewFile 文件名 | 白名单正则 |
|
||||
| H-08 | LOW | Monaco CDN 无 SRI | ACCEPTED_RISK(版本锁定) |
|
||||
| H-13 | MEDIUM | modalTextarea null 引用 | 移除 dead code |
|
||||
| H-20 | LOW | initialPath 全标签 cd | _initialCdSent 标志 |
|
||||
| H-26 | MEDIUM | esc() 不一致 | 统一为含引号转义版本 |
|
||||
| H-30 | LOW | esc() 注释 | 更新注释 |
|
||||
|
||||
## 结论
|
||||
|
||||
☑ 审计通过,8 FINDING 全部已处理(7 修复 + 1 ACCEPTED_RISK),0 遗留
|
||||
@@ -0,0 +1,61 @@
|
||||
# Changelog — Monaco 编辑器 + IDE 重构 + 文件管理增强
|
||||
|
||||
**日期**: 2026-05-30
|
||||
**Commit**: e8c1acb (含 15+ commits)
|
||||
**类型**: 功能增强 + 安全修复
|
||||
**涉及文件**:
|
||||
- `web/app/files.html` — IDE 编辑器全面重构
|
||||
- `web/app/api.js` — Monaco 预加载(后移入 files.html)
|
||||
- `web/app/terminal.html` — path 参数自动 cd
|
||||
- `web/app/servers.html` — 「文件」按钮
|
||||
- `server/api/sync_v2.py` — chmod/compress/decompress 端点
|
||||
- `server/api/schemas.py` — FileChmod/FileCompress/FileDecompress schema
|
||||
|
||||
## Monaco 编辑器
|
||||
|
||||
- 全局预加载:页面加载后 CDN 后台下载 Monaco (~2MB)
|
||||
- IDE 面板:全屏替代模态框,支持多文件标签页
|
||||
- 每个标签独立 Monaco 实例,切换保持状态
|
||||
- 语法高亮:30+ 语言自动检测(conf→ini, sh→shell, py→python 等)
|
||||
- Ctrl+S 保存 + 未保存指示器
|
||||
- 状态栏:光标位置 + 语言 + 文件路径
|
||||
|
||||
## 文件管理增强
|
||||
|
||||
- 右键菜单:预览/下载/重命名/权限/复制路径/终端/压缩/解压/删除
|
||||
- 文件树:IDE 左侧面板,点击文件打开/目录导航
|
||||
- 最小化/恢复:底部标签栏
|
||||
- 新建文件按钮(📄+)
|
||||
- chmod 权限修改
|
||||
- 压缩 tar.gz / 解压 tar.gz+zip
|
||||
- 排序切换(名称/大小/时间)
|
||||
- 文件类型筛选(.conf/.log/.sh/.py/.json/.yml/.txt)
|
||||
- 文件预加载 + 缓存(≤1MB 文本文件,双击秒开)
|
||||
|
||||
## SSH 终端集成
|
||||
|
||||
- 工具栏「🖥 终端」按钮
|
||||
- 新标签页打开 SSH + 自动 cd 到当前目录
|
||||
- terminal.html 支持 path URL 参数
|
||||
|
||||
## 服务器列表
|
||||
|
||||
- 每行操作栏新增「文件」按钮(琥珀色)
|
||||
- 点击直达文件管理,自动选中服务器
|
||||
|
||||
## 安全修复(审计 FINDING)
|
||||
|
||||
- H-01: esc() 加引号转义防 onclick XSS
|
||||
- H-02: initialPath 路径白名单防命令注入
|
||||
- H-03: 新建文件文件名白名单
|
||||
- H-13: 移除 showModal 中已删除的 textarea 引用
|
||||
- H-20: initialPath 仅首次连接 cd
|
||||
- H-26: esc() 跨文件一致性
|
||||
|
||||
## 已知限制
|
||||
|
||||
- Monaco CDN 无 SRI(版本锁定 @0.45.0 降低风险)
|
||||
- Nginx 静态文件缓存可能导致更新延迟(需 nginx -s reload)
|
||||
|
||||
## 是否需迁移/重启
|
||||
- 需要重启后端服务(新增 chmod/compress/decompress 端点)
|
||||
Reference in New Issue
Block a user