# JRedisDesktop 项目审查报告 > 审查日期:2026-07-12 > 审查方式:并行扫描主进程、渲染进程、IPC 契约一致性 > 审查范围:主进程 10 文件、渲染进程 ~40 文件、IPC 65 通道 > 发现问题:54 个(P0×6, P1×12, P2×17, P3×19) > 已修复:**P0×6 全部修复** (2026-07-12) > 可开发需求:26 项(高优先级 6,中 11,低 9) --- ## 目录 - [一、缺陷清单(按优先级)](#一缺陷清单按优先级) - [二、系统性架构问题](#二系统性架构问题) - [三、可开发需求清单(按优先级)](#三可开发需求清单按优先级) - [四、修复路线图建议](#四修复路线图建议) - [五、关键数据](#五关键数据) --- ## 一、缺陷清单(按优先级) ### P0 - 必须立即修复(安全/数据丢失) — 全部已修复 | # | 位置 | 问题 | 状态 | |---|------|------|------| | 1 | `src/main/ipc-handlers.ts:55-62` | **凭据明文存储**:`storage:saveConnection` 加密 auth/sshPassword/sshPassphrase (enc: 前缀);`storage:getConnections` 读取时解密 | **已修复** | | 2 | `src/main/redis/format.ts:51-79` | **命令注入**:新增 `ALLOWED_FORMATTERS` 白名单(xxd/jq/python3/python/php/column),不在白名单则拒绝执行 | **已修复** | | 3 | `src/main/ipc-handlers.ts:105-121` | **无命令白名单**:新增 `BLOCKED_COMMANDS` (FLUSHALL/FLUSHDB/SHUTDOWN/DEBUG);`redis:execute` 拦截危险命令;新增 `redis:executeUnsafe` 供 CLI 绕过 | **已修复** | | 4 | `src/main/index.ts:67-70` | **退出无清理**:新增 `app.on('will-quit')` 调用 `disconnectAll()` + `stopAllPubSubClients()` | **已修复** | | 5 | `src/main/redis/connection.ts` (3处) | **超时竞态**:Sentinel/Cluster/普通模式的 setTimeout 均保存 timer ID,在 ready/error 路径调用 clearTimeout | **已修复** | | 6 | `src/main/credential.ts:4-5` | **safeStorage 不可用时回退明文**:encrypt/decrypt 在 safeStorage 不可用时抛出错误,decrypt catch 保留 base64 兼容旧数据并加 console.warn | **已修复** | ### P1 - 严重 Bug(功能错误) | # | 位置 | 问题 | |---|------|------| | 7 | `CliView.vue:52-101` | **MULTI/EXEC 事务逻辑错误**:事务模式下每条命令仍通过 IPC 单独发送到 Redis,服务器立即执行而非排队。完全破坏事务语义。应本地排队,EXEC 时 pipeline 一次性发送。 | | 8 | `KeyDetail.vue:43-68` | **TTL 定时器模块级泄漏**:`setInterval` 在 `