# U-Desk 多维度代码走查报告 > 审查日期:2026-03-27 > 项目:u-desk v0.3.3 (Wails Go+Vue 桌面应用) > 分支:feature/ai-agent-integration > 审查范围:全部 Go 后端 + Vue 前端源码 --- ## 综合评分总览 | 维度 | 评分 | 等级 | |------|------|------| | 安全性 | 6.0 / 10 | 🟡 中等 | | 代码质量 | 5.5 / 10 | 🟡 中等 | | 性能 | 4.0 / 10 | 🔴 较差 | | 前端架构 | 6.5 / 10 | 🟡 中等 | | 后端架构 | 5.5 / 10 | 🟡 中等 | | 依赖兼容性 | 7.5 / 10 | 🟢 良好 | | 类型安全 | 5.5 / 10 | 🟡 中等 | | 构建配置 | 6.0 / 10 | 🟡 中等 | | **综合** | **5.8 / 10** | **🟡 中等** | --- ## 一、P0 级问题(必须立即修复) ### 1.1 🔴 查询哈希函数返回字符串长度而非哈希值 - **文件**: `internal/dbclient/query_optimizer.go:418-425` - **问题**: `generateQueryHash` 返回 `fmt.Sprintf("%x", len(hashData))`,仅返回拼接字符串的长度。两条完全不同的 SQL 只要长度相同(如 `SELECT * FROM users` 和 `DELETE FROM orders`)会生成相同 hash,导致缓存键碰撞,后续查询错误命中不相关的缓存结果。 - **影响**: **数据正确性 bug**,查询缓存机制完全失效且会产生错误结果 - **修复**: ```go import "crypto/sha256" func (o *QueryOptimizer) generateQueryHash(params QueryParams) string { hashData := fmt.Sprintf("%s|%s|%d|%d|%s|%s|%s|%v", params.SQL, params.Database, params.Limit, params.Offset, params.Table, params.Where, params.SortBy, params.IsReadOnly) h := sha256.Sum256([]byte(hashData)) return fmt.Sprintf("%x", h) } ``` ### 1.2 🔴 连接池 Acquire 后无 Release - **文件**: `internal/dbclient/pool.go:66-69` - **问题**: `GetMySQLClient` 调用 `Acquire()` 后仅提取 `entry.Client` 返回,`entry` 被丢弃。`InUse` 永远为 `true`,连接池逐渐耗尽。全项目搜索 `pool.Release`/`entry.Release` 无任何匹配。 - **影响**: 连接池机制完全失效,退化为每次创建新连接 - **修复**: 在调用方使用 `defer p.mysqlPool.Release(entry)` 释放连接 ### 1.3 🔴 Markdown XSS — v-html 无 sanitize - **文件**: `frontend/src/components/MarkdownPreview.vue:3,20` - **问题**: `marked()` 输出直接通过 `v-html` 渲染,无 DOMPurify 或任何 sanitize。用户打开的 `.md` 文件中的 `