JAVA代码审计之SSM框架与示例
字数 1885 2025-08-15 21:31:09

SSM框架代码审计全面指南

1. SSM框架概述与组件关系

SSM框架由Spring、SpringMVC和MyBatis三大组件构成:

  1. Spring:核心框架,负责依赖注入和Bean管理
  2. SpringMVC:基于Spring的MVC框架,处理Web请求
  3. MyBatis:持久层框架,负责数据库操作

1.1 请求处理流程

  1. Tomcat启动后加载web.xml配置
  2. 生成DispatcherServlet类,将请求转发至SpringMVC
  3. DispatcherServlet初始化参数contextConfigLocation指定Spring配置文件
  4. 若无此参数,默认加载WEB-INF/DispatcherServlet-servlet.xml

1.2 核心配置文件

  • web.xml:配置Spring监听器、主配置路径、过滤器等
  • applicationContext.xml:Spring核心配置,生成Bean、配置连接池、创建sqlSessionFactory

2. MyBatis核心组件

  1. SqlSessionFactoryBuilder:从XML或Configuration实例构建SqlSessionFactory
  2. SqlSessionFactory:关键对象,用于创建SqlSession实例
  3. SqlSession:直接执行映射的SQL语句

在MyBatis-Spring中,使用SqlSessionFactoryBean创建SqlSessionFactory

3. 安全漏洞审计方法

3.1 SQL注入漏洞审计

正向审计流程:

  1. 定位请求URL(如/login
  2. 在IDEA中使用Ctrl+Shift+F搜索路径
  3. 找到控制器中的@RequestMapping方法
  4. 检查是否有SQL注入防护过滤器
  5. 跟踪Service层到Dao层
  6. 检查Mapper.xml中的SQL语句是否使用预编译

反向审计流程:

  1. 全局搜索${(MyBatis中SQL拼接符号)
  2. 找到使用该符号的Mapper.xml文件
  3. 定位对应的Dao接口和方法
  4. 使用Ctrl+Alt+H查找方法调用链
  5. 跟踪到Controller和前端URL
  6. 确认参数是否可控

3.2 XSS漏洞审计

  1. 定位提交数据的URI
  2. 检查web.xml中的过滤器配置
  3. 分析过滤器中的XSS防护逻辑
  4. 常见问题点:
    • 正则表达式不完善(可绕过)
    • 仅对匹配内容进行实体化编码
    • 未对所有输出点进行编码

3.3 SSRF漏洞审计

  1. 定位涉及URL处理的请求(如图片/链接插入)
  2. 检查URL处理逻辑:
    • 是否直接使用URLConnection
    • 是否调用getInputStream()建立连接
    • 是否有白名单限制

3.4 XXE漏洞审计

  1. 定位XML处理端点
  2. 检查XML解析配置:
    • 是否允许外部实体(setExpandEntityReferences(true)
    • 是否使用不安全的解析器(如Unmarshal
    • 是否有实体解析限制

3.5 路径穿越漏洞审计

  1. 定位文件上传/下载功能
  2. 检查文件名处理:
    • 是否直接拼接用户输入
    • 是否规范化路径
    • 是否有目录限制

3.6 逻辑漏洞审计

  1. 分析业务流程(如密码重置流程)
  2. 检查条件判断:
    • 是否可绕过关键验证
    • 参数处理是否严格
    • 状态检查是否完善

4. 审计工具与技巧

  1. IDEA快捷键

    • Ctrl+Shift+F:全局搜索
    • Ctrl+Alt+B:进入实现类
    • Ctrl+Alt+H:查看方法调用链
  2. 关键搜索词

    • ${:MyBatis SQL拼接
    • @RequestMapping:控制器端点
    • getParameter:参数获取点
    • executeQuery:SQL执行点
  3. 审计路径

    • web.xml → 过滤器 → 控制器 → 服务 → Dao → Mapper.xml
    • 或反向从Mapper.xml → Dao → 服务 → 控制器

5. 防御建议

  1. SQL注入

    • 使用预编译语句
    • 避免直接拼接SQL
    • 使用ORM框架的安全方法
  2. XSS

    • 输入过滤与输出编码
    • 使用成熟的防护库
    • 内容安全策略(CSP)
  3. SSRF

    • 限制请求协议和域名
    • 使用白名单机制
    • 禁用重定向
  4. XXE

    • 禁用外部实体
    • 使用安全解析器
    • 限制实体解析
  5. 路径穿越

    • 规范化路径
    • 限制目录范围
    • 重命名上传文件
  6. 逻辑漏洞

    • 严格验证业务流程
    • 关键操作二次确认
    • 服务端状态检查

通过系统性地审计SSM框架应用的各个组件和流程,可以有效发现和修复安全漏洞,提升应用安全性。

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框架应用的各个组件和流程,可以有效发现和修复安全漏洞,提升应用安全性。