未经许可,不得转载。
文章目录
在开展Java代码审计之前,需先夯实相关基础知识,以确保审计过程更加高效和精准。
请同时参考:【Java开发指南 | 优快云秋说】
Spring应用程序分层架构
Spring 是一个功能强大的 Java 开源框架,主要用于简化 Java 企业级应用开发。它提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等核心特性,并支持集成各种 Java 技术(如 JDBC、JPA、Spring MVC)。Spring 通过 IoC(控制反转)容器管理对象生命周期,减少了代码耦合,提高了开发效率。
Spring 与 Java 的关系密切,它基于 Java 语言构建,广泛应用于 Java Web 开发、微服务架构(如 Spring Boot 和 Spring Cloud),成为 Java 生态中最主流的开发框架之一。
Spring 适用于大规模、细粒度控制的企业级开发,Spring Boot 更适合快速开发、微服务架构。
1. 表现层(View 层)
定义:处理用户界面展示,常使用JSP、Thymeleaf、Freemarker等模板引擎
核心组件:
- 模板文件(.jsp/.html)
- 视图解析器(ViewResolver)
- 前端控制器(DispatcherServlet)
审计要点:
<!-- 漏洞示例:未转义的XSS漏洞 -->
<p>${userInput}</p> <!-- 危险写法 -->
<p th:text="${userInput}"></p> <!-- 安全写法 -->
- 模板引擎是否开启自动HTML转义
- 动态内容输出时是否强制使用安全输出语法
- 客户端渲染(如Vue/React)与服务器端渲染的混合使用场景
2. 接口层(API 层)
定义:提供RESTful/SOAP等API接口,使用@RestController
标注
典型特征:
- 接口响应格式(JSON/XML)
- 统一状态码管理(如200/401/500)
审计要点:
@GetMapping("/user")
public User getUser(@RequestParam String id) {
// 未经验证的参数
return userService.findById(id);
}
- 接口鉴权缺失(如未使用
@PreAuthorize
) - 敏感数据未脱敏(如密码字段返回给前端)
- 未限制HTTP方法(如PUT/DELETE权限控制)
3. 控制器层(Controller 层)
核心组件:@Controller
、@RequestMapping
处理流程:
- 接收HTTP请求参数
- 调用Service层处理业务
- 返回视图或数据模型
审计要点:
@RequestMapping("/download")
public void downloadFile(String filename, HttpServletResponse response) {
File file = new File("/uploads/" + filename); // 路径遍历漏洞风险
// ...
}
- 参数绑定漏洞(如
@RequestParam
未校验格式) - 未处理文件上传大小限制(导致DoS攻击)
- 重定向未校验目标地址(开放重定向漏洞)
4. 业务逻辑层(Service 层)
核心组件:@Service
注解类
职责:
- 实现核心业务规则
- 事务管理(
@Transactional
)
审计示例:
@Service
public class PaymentService