JAVA代码审计之SSM框架与示例
字数 1885 2025-08-15 21:31:09
SSM框架代码审计全面指南
1. SSM框架概述与组件关系
SSM框架由Spring、SpringMVC和MyBatis三大组件构成:
- Spring:核心框架,负责依赖注入和Bean管理
- SpringMVC:基于Spring的MVC框架,处理Web请求
- MyBatis:持久层框架,负责数据库操作
1.1 请求处理流程
- Tomcat启动后加载
web.xml配置 - 生成
DispatcherServlet类,将请求转发至SpringMVC DispatcherServlet初始化参数contextConfigLocation指定Spring配置文件- 若无此参数,默认加载
WEB-INF/DispatcherServlet-servlet.xml
1.2 核心配置文件
- web.xml:配置Spring监听器、主配置路径、过滤器等
- applicationContext.xml:Spring核心配置,生成Bean、配置连接池、创建
sqlSessionFactory
2. MyBatis核心组件
- SqlSessionFactoryBuilder:从XML或Configuration实例构建SqlSessionFactory
- SqlSessionFactory:关键对象,用于创建SqlSession实例
- SqlSession:直接执行映射的SQL语句
在MyBatis-Spring中,使用SqlSessionFactoryBean创建SqlSessionFactory
3. 安全漏洞审计方法
3.1 SQL注入漏洞审计
正向审计流程:
- 定位请求URL(如
/login) - 在IDEA中使用
Ctrl+Shift+F搜索路径 - 找到控制器中的
@RequestMapping方法 - 检查是否有SQL注入防护过滤器
- 跟踪Service层到Dao层
- 检查Mapper.xml中的SQL语句是否使用预编译
反向审计流程:
- 全局搜索
${(MyBatis中SQL拼接符号) - 找到使用该符号的Mapper.xml文件
- 定位对应的Dao接口和方法
- 使用
Ctrl+Alt+H查找方法调用链 - 跟踪到Controller和前端URL
- 确认参数是否可控
3.2 XSS漏洞审计
- 定位提交数据的URI
- 检查web.xml中的过滤器配置
- 分析过滤器中的XSS防护逻辑
- 常见问题点:
- 正则表达式不完善(可绕过)
- 仅对匹配内容进行实体化编码
- 未对所有输出点进行编码
3.3 SSRF漏洞审计
- 定位涉及URL处理的请求(如图片/链接插入)
- 检查URL处理逻辑:
- 是否直接使用
URLConnection - 是否调用
getInputStream()建立连接 - 是否有白名单限制
- 是否直接使用
3.4 XXE漏洞审计
- 定位XML处理端点
- 检查XML解析配置:
- 是否允许外部实体(
setExpandEntityReferences(true)) - 是否使用不安全的解析器(如
Unmarshal) - 是否有实体解析限制
- 是否允许外部实体(
3.5 路径穿越漏洞审计
- 定位文件上传/下载功能
- 检查文件名处理:
- 是否直接拼接用户输入
- 是否规范化路径
- 是否有目录限制
3.6 逻辑漏洞审计
- 分析业务流程(如密码重置流程)
- 检查条件判断:
- 是否可绕过关键验证
- 参数处理是否严格
- 状态检查是否完善
4. 审计工具与技巧
-
IDEA快捷键:
Ctrl+Shift+F:全局搜索Ctrl+Alt+B:进入实现类Ctrl+Alt+H:查看方法调用链
-
关键搜索词:
${:MyBatis SQL拼接@RequestMapping:控制器端点getParameter:参数获取点executeQuery:SQL执行点
-
审计路径:
- web.xml → 过滤器 → 控制器 → 服务 → Dao → Mapper.xml
- 或反向从Mapper.xml → Dao → 服务 → 控制器
5. 防御建议
-
SQL注入:
- 使用预编译语句
- 避免直接拼接SQL
- 使用ORM框架的安全方法
-
XSS:
- 输入过滤与输出编码
- 使用成熟的防护库
- 内容安全策略(CSP)
-
SSRF:
- 限制请求协议和域名
- 使用白名单机制
- 禁用重定向
-
XXE:
- 禁用外部实体
- 使用安全解析器
- 限制实体解析
-
路径穿越:
- 规范化路径
- 限制目录范围
- 重命名上传文件
-
逻辑漏洞:
- 严格验证业务流程
- 关键操作二次确认
- 服务端状态检查
通过系统性地审计SSM框架应用的各个组件和流程,可以有效发现和修复安全漏洞,提升应用安全性。