news 2026/4/25 15:44:12

云R记(lezijie-note0707)全面代码审查报告

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
云R记(lezijie-note0707)全面代码审查报告

云R记(lezijie-note0707)全面代码审查报告

审查日期:2026-04-24
项目路径:D:\乐字节\01_乐字节Java入门级项目云日记\lezijie-note0707\lezijie-note
技术栈:Java 8 + Servlet 4 + JSP + JSTL + MySQL + JDBC + UEditor + ECharts + 百度地图API + Bootstrap + jQuery + SweetAlert2 + Hutool + FastJSON + Lombok
服务器:Apache Tomcat 7.0.67 + JDK 1.8.0_45


审查统计

严重性数量说明
🔴 致命3必须立即修复,影响核心功能或安全
🟠 严重8尽快修复,存在安全风险或功能异常
🟡 中等12建议修复,影响代码质量或用户体验
🔵 低14可选修复,代码规范和优化建议
⚪ 信息10冗余文件、代码风格等
合计47

一、🔴 致命问题(3个)

1.1 修改密码功能完全失效

位置:[UserService.java:244](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/java/com/lezijie/note/service/UserService.java#L244)

现象:用户修改密码时,无论输入什么旧密码都能修改成功,原密码验证逻辑完全缺失。

根因:updatePwd方法中调用userDao.queryUserByName(null)传入null作为用户名,永远查不到用户对象,导致旧密码校验被跳过。

修复方案:

// 错误代码Useruser=userDao.queryUserByName(null);// 正确代码 - 从session获取当前登录用户名StringuserName=((User)request.getSession().getAttribute("user")).getUname();Useruser=userDao.queryUserByName(userName);if(user==null){resultInfo.setCode(0);resultInfo.setMsg("用户不存在!");returnresultInfo;}

1.2 Cookie 明文存储密码

位置:[UserServlet.java:216](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/java/com/lezijie/note/web/UserServlet.java#L216)

现象:用户登录时将明文密码存入 Cookie,浏览器开发者工具可直接查看。

根因:Cookie 值使用URLEncoder.encode(userName, "UTF-8") + "|" + URLEncoder.encode(userPwd, "UTF-8")格式,密码未加密。

修复方案:Cookie 中不存储密码,改为存储随机 Token,服务端维护 Token 与用户的映射关系。


1.3 生产数据库密码泄露

位置:[product/db.properties:5-9](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/resources/product/db.properties#L5)

现象:远程服务器 IP119.27.191.180和密码123456明文写在配置文件中,且该文件在版本控制中。

修复方案:将敏感信息移到环境变量或外部配置中心,不提交到版本库。


二、🟠 严重问题(8个)

2.1 XSS 漏洞 — 多处未转义输出

位置:

文件行号未转义内容
index.jsp72-73${user.nick}${user.mood}
index.jsp83${item.groupName}
detail.jsp10${note.title}
detail.jsp16${note.content}(仅替换了 script 标签,其他 XSS 向量未防护)
type/list.jsp32${item.typeName}
user/info.jsp19${user.nick}${user.mood}

修复方案:使用<c:out value="${xxx}"/>${fn:escapeXml(xxx)}进行 HTML 转义。


2.2 文件路径遍历风险

位置:[UserServlet.java:125-129](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/java/com/lezijie/note/web/UserServlet.java#L125)

现象:userHead方法直接从参数imageName拼接文件路径,未校验路径遍历(如../)。

修复方案:imageName做白名单校验,只允许字母数字和文件扩展名。


2.3 view.jsp JavaScript 拼写错误

位置:[view.jsp:168](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/webapp/note/view.jsp#L168)

现象:thi.getStatus()拼写错误,应为this.getStatus(),导致 JS 运行时错误。

修复方案:

// 错误thi.getStatus()// 正确this.getStatus()

2.4 detail.jsp 非法字符

位置:[detail.jsp:2](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/webapp/note/detail.jsp#L2)

现象:第2行存在 Windows 换行符被错误插入到 JSP 标签声明中,可能导致 JSP 编译错误。

修复方案:删除非法字符,确保 taglib 声明在同一行。


2.5 条件查询互斥

位置:[NoteDao.java:58-75](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/java/com/lezijie/note/dao/NoteDao.java#L58) 和 [NoteDao.java:101-116](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/java/com/lezijie/note/dao/NoteDao.java#L101)

现象:标题、日期、类型三个搜索条件使用else if,导致互斥。如果同时传了 title 和 date,只会按 title 查询,date 条件被忽略。

修复方案:改为独立的if判断,支持多条件组合查询。


2.6 导航链接 404

位置:[index.jsp:42](file:///D:/乐字节/01_乐字节Java入门级项目云日记/lezijie-note0707/lezijie-note/src/main/webapp/index.jsp#L42)

现象:Logo 的href="main"指向不存在的 Servlet 路径,点击后 404。

修复方案:改为href="index"


2.7 百度地图 API 密钥硬编码

位置:view.jsp:156, report/info.jsp:33

现象:百度地图 AK 密钥yrxymYTyuefnxNtXbZcMU8phABXtu6TG硬编码在前端页面中。

修复方案:将密钥移到配置文件中,通过后端接口获取。


2.8 UEditor config.js BOM 字符

位置:statics/ueditor/dialogs/template/config.js

现象:文件包含非法 BOM 字符\ufeff,可能导致 JS 解析异常。

修复方案:用无 BOM 的 UTF-8 编码重新保存文件。


三、🟡 中等问题(12个)

#问题位置说明
1noteId 为空时仍查询NoteServlet.java:160-162传入 null 会导致 SQL 异常
2SQL 数据不一致db_lezijie_note修改加内容.sql:81userId=9 密码为明文,其他为 MD5
3dateInfo/typeInfo 存入 SessionIndexServlet.java:103-108数据不随云记增删实时更新
4db.properties 密码被注释掉develop/db.properties:9运行时 dbPwd 为 null,数据库连接失败
5db.properties 驱动名过时develop/db.properties:3使用旧驱动com.mysql.jdbc.Driver
6LoginAccessFilter 放行逻辑有漏洞LoginAccessFilter.java:78-86Cookie 伪造可能绕过登录验证
7config.json 两份文件不一致config.json vs config (2).jsonimageUrlPrefix 一个为 /note 一个为空
8WEB-INF/classes/ 下不应有 config.jsonWEB-INF/classes/config.json编译输出目录不应手动放文件
9每次请求创建新 Service 实例IndexServlet.java:95,101,106应使用成员变量复用
10UserDao 冗余方法UserDao.java:49-84queryUserByName02 未被调用
11错别字 “不能卫空”UserService.java:143“卫” 应为 “为”
12DBUtil 方法名拼写错误DBUtil.java:33getConnetion应为getConnection

四、🔵 低级问题(14个)

#问题位置
1BaseDao 使用原始类型 ListBaseDao.java:142-143
2BaseDao 使用已弃用 APIcls.newInstance()BaseDao.java:171
3异常全用e.printStackTrace()多处
4UserService 中System.out.printlnUserService.java:72
5User 类重复 setterUser.java:18-20
6SQL 注入风险(低)— LIKE 通配符未转义NoteDao.java:60
7Cookie 分隔符 `` 不安全
8report/info.jsp 缺少 JSTL 声明report/info.jsp:1
9NoteVo 中 noteCount 类型为 longNoteVo.java:11
10login.jsp c:out 输出空串无意义login.jsp:34-35
11CSS 语法错误login.css:10
12fastjson 版本过旧(1.2.62 有安全漏洞)pom.xml:63
13commons-fileupload 版本过旧pom.xml:84
14百度地图 API 版本不一致view.jsp vs report/info.jsp

五、⚪ 冗余文件(10个)

#文件说明
1index (2).jsp旧版本,类型链接 href 为空
2register (2).jsp旧版本注册页面
3register (3).jsp旧版本注册页面
4type (2).js旧版本 JS,li 链接为空
5config (2).json旧版本 UEditor 配置,imageUrlPrefix 为空
6src lezijie-note20260424/备份目录,不应在源码中
7src lezijie-note20260424-1/备份目录
8src lezijie-note20260424-2/备份目录
9WEB-INF/classes/config.json编译输出目录中的文件
10config.json注释错别字 “具请体看”config.json:24

六、修复优先级建议

第一优先级 — 立即修复(影响核心功能)

  1. ✅ 修改密码功能失效(#1.1)
  2. ✅ view.jsp 拼写错误thi.getStatus()(#2.3)
  3. ✅ detail.jsp 非法字符(#2.4)
  4. ✅ 导航链接 404(#2.6)
  5. ✅ db.properties 密码被注释掉(#3.4)

第二优先级 — 尽快修复(安全风险)

  1. Cookie 明文密码(#1.2)
  2. XSS 漏洞(#2.1)
  3. 文件路径遍历(#2.2)
  4. 生产数据库密码泄露(#1.3)

第三优先级 — 计划修复(代码质量)

  1. 条件查询互斥(#2.5)
  2. noteId 空指针(#3.1)
  3. Session 数据不更新(#3.3)
  4. 删除冗余文件(#5)

第四优先级 — 可选优化

  1. BaseDao 泛型化
  2. 引入数据库连接池
  3. 添加日志记录
  4. 升级依赖版本

七、已修复问题清单

#问题修复状态
1点击分类界面无变化(href=“”)✅ 已修复
2UEditor controller.jsp 构造函数参数错误✅ 已修复
3UEditor imageUrlPrefix 为空导致图片无法显示✅ 已修复
4文件上传路径 WEb-INF 拼写错误✅ 已修复
5用户注册功能缺失✅ 已添加
6修改密码功能缺失✅ 已添加(但逻辑有 bug)
7register.jsp 页面布局问题✅ 已修复
8login.jsp 添加注册链接✅ 已修复
9register.jsp BOM 字符✅ 已修复

报告生成时间:2026-04-24

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 15:43:07

如何从图表图像中智能提取数据?WebPlotDigitizer给你答案

如何从图表图像中智能提取数据&#xff1f;WebPlotDigitizer给你答案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾面对科研…

作者头像 李华
网站建设 2026/4/25 15:41:36

一文解读 SQL 生成工具

SQL 生成工具可用于测试 Parser 与其他数据库产品的兼容性&#xff0c;通过解析 YACC 语法文件中的产生式&#xff0c;生成对应的 SQL 语句&#xff0c;再使用数据库执行该 SQL&#xff0c;根据结果判断语句是否与其他数据库语法兼容。 01工具使用 语法文件预处理 预处理目的…

作者头像 李华
网站建设 2026/4/25 15:41:33

AgentCode 深度技术解析:极简架构下的 AI 编程代理设计哲学

AgentCode 深度技术解析&#xff1a;极简架构下的 AI 编程代理设计哲学 一、架构设计&#xff1a;为什么"极简"反而更强大&#xff1f; 1.1 核心架构概览 AgentCode 采用经典的 ReAct&#xff08;Reasoning Acting&#xff09;范式&#xff0c;但做了关键的工程化…

作者头像 李华
网站建设 2026/4/25 15:40:38

Conftest实战:基于OPA的配置策略即代码守护者

1. 项目概述&#xff1a;为什么我们需要一个策略即代码的守护者&#xff1f; 在云原生和基础设施即代码&#xff08;IaC&#xff09;的浪潮下&#xff0c;我们编写和管理的配置文件&#xff08;如Kubernetes的YAML、Terraform的HCL、Dockerfile&#xff09;数量呈指数级增长。…

作者头像 李华
网站建设 2026/4/25 15:40:15

3个关键问题,让你的苹果触控板在Windows上重获新生

3个关键问题&#xff0c;让你的苹果触控板在Windows上重获新生 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad …

作者头像 李华
网站建设 2026/4/25 15:38:16

终极指南:在Windows 10/11上为苹果触控板安装完整开源驱动

终极指南&#xff1a;在Windows 10/11上为苹果触控板安装完整开源驱动 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpa…

作者头像 李华