以AJ-Report为例从0开始学习Java代码审计
字数 1432 2025-08-20 18:17:53

AJ-Report Java代码审计从0开始学习指南

1. 审计环境准备

1.1 基础工具配置

  • IDE选择:PyCharm/IntelliJ IDEA(建议使用IntelliJ IDEA进行Java审计)
  • Java环境:JDK 8+(推荐JDK 11)
  • 构建工具:Maven 3.6+
  • 调试工具:Arthas、JD-GUI、JADX

1.2 项目导入步骤

  1. 克隆AJ-Report源码仓库
  2. 使用Maven导入项目依赖
  3. 配置数据库连接(MySQL 5.7+)
  4. 启动项目并验证基础功能

2. 项目结构分析

2.1 核心目录结构

src/main/java/com/anji/plus/
├── gaea
│   ├── core       // 核心框架代码
│   ├── exception  // 异常处理
│   ├── security   // 安全相关
│   └── util       // 工具类
├── report
│   ├── controller // 控制器层
│   ├── service    // 服务层
│   ├── dao        // 数据访问层
│   └── entity     // 实体类
└── config         // 配置类

2.2 常见问题解决

  • com.anji.plus.gaea..module..dao飘红问题
    • 检查Maven依赖是否完整
    • 确认子模块是否被正确导入
    • 执行mvn clean install重新构建
    • 检查IDE的Maven配置是否正确

3. 代码审计核心要点

3.1 SQL注入审计

  1. MyBatis审计重点

    • 检查XML映射文件中${}的使用
    • 审计动态SQL拼接(<if>, <foreach>等标签)
    • 验证参数是否使用#{}预编译
  2. JPA审计重点

    • 检查@Query注解中的原生SQL
    • 审计JpaRepository自定义方法实现
    • 验证Specification构建的查询条件

3.2 XSS漏洞审计

  1. 输入输出审计

    • 检查Controller层参数是否使用@RequestBody/@RequestParam
    • 验证返回数据是否经过转义(如使用Thymeleaf的th:text
  2. 响应头检查

    • 确认是否设置X-XSS-Protection
    • 检查Content-Type是否正确(避免text/html)

3.3 权限控制审计

  1. Spring Security配置

    • 检查WebSecurityConfigurerAdapter配置
    • 验证URL权限控制是否完善
    • 审计@PreAuthorize注解使用情况
  2. 功能权限审计

    • 检查关键操作是否进行权限验证
    • 审计越权访问风险(水平/垂直越权)

4. 典型漏洞案例分析

4.1 未授权访问漏洞

// 错误示例:缺少权限注解
@GetMapping("/api/report/export")
public void exportReport(HttpServletResponse response) {
    // 导出报表逻辑
}

// 修复方案:添加权限控制
@PreAuthorize("hasRole('REPORT_EXPORT')")
@GetMapping("/api/report/export")
public void exportReport(HttpServletResponse response) {
    // 导出报表逻辑
}

4.2 SQL注入案例

// 错误示例:使用字符串拼接SQL
@Query(value = "SELECT * FROM report WHERE name = '" + "#{name}" + "'", nativeQuery = true)
List<Report> findByName(String name);

// 修复方案:使用参数化查询
@Query(value = "SELECT * FROM report WHERE name = ?1", nativeQuery = true)
List<Report> findByName(String name);

4.3 文件上传漏洞

// 错误示例:未校验文件类型和内容
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    String fileName = file.getOriginalFilename();
    file.transferTo(new File("/uploads/" + fileName));
    return "success";
}

// 修复方案:添加安全检查
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    // 校验文件类型
    String contentType = file.getContentType();
    if(!ALLOWED_TYPES.contains(contentType)) {
        throw new IllegalArgumentException("Invalid file type");
    }
    
    // 校验文件内容
    byte[] bytes = file.getBytes();
    if(!isSafeContent(bytes)) {
        throw new IllegalArgumentException("Malicious content detected");
    }
    
    // 使用随机文件名
    String fileName = UUID.randomUUID() + getExtension(file.getOriginalFilename());
    file.transferTo(new File("/uploads/" + fileName));
    return "success";
}

5. 审计工具链推荐

  1. 静态分析工具

    • SpotBugs(查找常见编码问题)
    • Dependency-Check(依赖安全检查)
    • Semgrep(自定义规则扫描)
  2. 动态分析工具

    • Burp Suite(接口测试)
    • OWASP ZAP(自动化扫描)
    • JMeter(压力测试)
  3. 代码审计辅助

    • CodeQL(高级语义分析)
    • Find Security Bugs(安全漏洞扫描)

6. 审计报告编写要点

  1. 漏洞描述

    • 清晰说明漏洞类型和位置
    • 提供完整的请求/响应示例
  2. 风险评级

    • 根据CVSS标准评估风险等级
    • 说明漏洞可能造成的影响
  3. 修复建议

    • 提供具体的代码修复方案
    • 建议的安全配置调整

7. 持续学习资源

  1. 官方文档

    • OWASP Top 10
    • Spring Security官方文档
    • MyBatis安全指南
  2. 实战平台

    • OWASP WebGoat
    • DVWA
    • Juice Shop
  3. 社区资源

    • 奇安信攻防社区
    • 先知社区
    • Seebug Paper

通过系统性地按照上述步骤进行审计,可以全面发现AJ-Report项目中的安全问题,并为其他Java项目的代码审计提供参考框架。

AJ-Report Java代码审计从0开始学习指南 1. 审计环境准备 1.1 基础工具配置 IDE选择 :PyCharm/IntelliJ IDEA(建议使用IntelliJ IDEA进行Java审计) Java环境 :JDK 8+(推荐JDK 11) 构建工具 :Maven 3.6+ 调试工具 :Arthas、JD-GUI、JADX 1.2 项目导入步骤 克隆AJ-Report源码仓库 使用Maven导入项目依赖 配置数据库连接(MySQL 5.7+) 启动项目并验证基础功能 2. 项目结构分析 2.1 核心目录结构 2.2 常见问题解决 com.anji.plus.gaea. .module. .dao飘红问题 : 检查Maven依赖是否完整 确认子模块是否被正确导入 执行 mvn clean install 重新构建 检查IDE的Maven配置是否正确 3. 代码审计核心要点 3.1 SQL注入审计 MyBatis审计重点 : 检查XML映射文件中 ${} 的使用 审计动态SQL拼接( <if> , <foreach> 等标签) 验证参数是否使用 #{} 预编译 JPA审计重点 : 检查 @Query 注解中的原生SQL 审计 JpaRepository 自定义方法实现 验证 Specification 构建的查询条件 3.2 XSS漏洞审计 输入输出审计 : 检查Controller层参数是否使用 @RequestBody / @RequestParam 验证返回数据是否经过转义(如使用Thymeleaf的 th:text ) 响应头检查 : 确认是否设置 X-XSS-Protection 检查 Content-Type 是否正确(避免text/html) 3.3 权限控制审计 Spring Security配置 : 检查 WebSecurityConfigurerAdapter 配置 验证URL权限控制是否完善 审计 @PreAuthorize 注解使用情况 功能权限审计 : 检查关键操作是否进行权限验证 审计越权访问风险(水平/垂直越权) 4. 典型漏洞案例分析 4.1 未授权访问漏洞 4.2 SQL注入案例 4.3 文件上传漏洞 5. 审计工具链推荐 静态分析工具 : SpotBugs(查找常见编码问题) Dependency-Check(依赖安全检查) Semgrep(自定义规则扫描) 动态分析工具 : Burp Suite(接口测试) OWASP ZAP(自动化扫描) JMeter(压力测试) 代码审计辅助 : CodeQL(高级语义分析) Find Security Bugs(安全漏洞扫描) 6. 审计报告编写要点 漏洞描述 : 清晰说明漏洞类型和位置 提供完整的请求/响应示例 风险评级 : 根据CVSS标准评估风险等级 说明漏洞可能造成的影响 修复建议 : 提供具体的代码修复方案 建议的安全配置调整 7. 持续学习资源 官方文档 : OWASP Top 10 Spring Security官方文档 MyBatis安全指南 实战平台 : OWASP WebGoat DVWA Juice Shop 社区资源 : 奇安信攻防社区 先知社区 Seebug Paper 通过系统性地按照上述步骤进行审计,可以全面发现AJ-Report项目中的安全问题,并为其他Java项目的代码审计提供参考框架。