某Java电商系统代码审计
字数 1833 2025-08-29 08:30:12
Java电商系统代码审计报告与安全防护指南
1. 系统概述
审计对象为一套基于Spring Boot 2.X开发的电商系统,包含:
- 前台商城系统:首页登录、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块
- 后台管理系统:数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块
2. 发现的安全漏洞及分析
2.1 任意用户登录漏洞
漏洞描述:系统存在用户身份认证不严问题,允许攻击者修改任意用户信息。
漏洞原理:
- 代码从前端直接获取
userid参数 - 未验证该
userid是否为当前登录用户 - 直接以
userid为主键查询数据库并修改用户信息
问题代码分析:
// 从http会话中获取用户信息
// 但实际修改操作使用的是传入的mallUser对象中的userid
// 未做身份验证
updateUserInfo(MallUser mallUser, HttpSession session) {
// 第74行:从session获取用户信息
Object attribute = session.getAttribute(Constants.MALL_USER_SESSION_KEY);
// 第75行:直接使用传入的userid
MallUser user = userMapper.selectByPrimaryKey(mallUser.getUserId());
if(user != null) {
// 直接修改用户信息
}
}
复现步骤:
- 构造请求,修改
userid为其他用户ID(如5) - 提交修改请求
- 数据库中对应用户信息被篡改
修复建议:
- 从session中获取当前登录用户ID
- 验证传入的
userid必须与当前用户ID一致 - 添加权限验证逻辑
2.2 任意订单状态修改漏洞
漏洞描述:攻击者可修改任意订单的支付状态。
漏洞原理:
- 系统仅根据订单号查询订单是否存在
- 存在则直接修改状态,无权限验证
- 通过
type参数判断支付状态(0=未支付,1=已支付)
复现步骤:
- 使用Burp Suite拦截订单状态修改请求
- 修改订单号为其他用户的订单
- 提交请求,成功修改订单状态
修复建议:
- 验证订单所属用户必须为当前用户
- 添加订单状态变更的业务逻辑验证
- 记录订单操作日志
2.3 任意文件上传漏洞
漏洞描述:系统文件上传功能未对文件名进行校验,可能导致恶意文件上传。
漏洞原理:
- 上传功能未对文件扩展名、内容类型进行验证
- 直接调用
transferTo保存文件 - 可能导致webshell上传、恶意文件存储
修复建议:
- 实现文件类型白名单验证
- 对上传文件重命名(避免目录穿越)
- 限制上传目录为不可执行
- 检查文件内容与类型是否匹配
2.4 XSS漏洞
漏洞描述:系统未对用户输入进行XSS防护,导致存储型XSS。
漏洞原理:
- 前端传入数据未进行过滤
- 恶意数据直接存入数据库
- 查询时数据在浏览器中执行触发XSS
问题代码分析:
// service层未对数据进行XSS防护
public void saveProduct(Product product) {
productMapper.insert(product);
}
复现步骤:
- 在商品名称等字段插入XSS payload(如
<script>alert(1)</script>) - 提交数据
- 管理员查看商品列表时触发XSS
修复建议:
- 对所有用户输入进行HTML实体编码
- 实现全局XSS过滤器
- 设置HTTP安全头(如Content-Security-Policy)
2.5 Swagger-UI未授权访问
漏洞描述:Swagger接口文档未做访问控制,暴露系统API。
风险:
- 暴露系统接口结构和参数
- 可能被用于构造恶意请求
修复建议:
- 生产环境禁用Swagger-UI
- 或添加权限验证
- 限制访问IP范围
2.6 CSRF漏洞
漏洞描述:系统未对请求进行CSRF防护,可被用于伪造用户请求。
漏洞表现:
- 关键操作(如修改密码)未验证CSRF token
- 请求包无任何CSRF防护校验
修复建议:
- 添加CSRF token机制
- 关键操作使用POST请求
- 验证Referer头
2.7 验证码复用漏洞
漏洞描述:登录验证码失效后未从session中删除,导致验证码可复用。
漏洞原理:
- 验证码使用后未立即失效
- 同一验证码可用于多次请求
- 降低暴力破解难度
修复建议:
- 验证码使用后立即从session中移除
- 设置较短的有效期
- 限制验证码错误次数
3. 综合安全加固方案
-
身份认证与授权:
- 实现严格的用户身份验证
- 所有敏感操作验证当前用户权限
- 采用RBAC权限模型
-
输入验证:
- 所有用户输入进行白名单验证
- 实现全局XSS和SQL注入过滤
- 文件上传严格限制类型和大小
-
会话安全:
- 实现CSRF防护机制
- 会话固定防护
- 敏感操作二次认证
-
安全配置:
- 生产环境关闭调试接口
- 配置安全HTTP头
- 定期更新依赖库
-
日志与监控:
- 记录所有敏感操作日志
- 实现异常行为监控
- 定期安全审计
4. 开发安全规范建议
- 所有数据库操作必须验证当前用户权限
- 用户输入必须经过验证和过滤
- 敏感操作必须记录详细日志
- 生产环境必须关闭调试功能
- 定期进行代码安全审计和渗透测试
通过实施以上安全措施,可显著提升系统安全性,防止文中所述漏洞被利用。