一、背景
作为一名Java后端开发者,日常工作中大量接触Spring Boot、Spring Cloud、MyBatis等框架。在开发过程中,我逐渐意识到很多安全漏洞并非来自复杂的底层二进制,而是业务代码中常见的逻辑缺陷------尤其是权限校验的遗漏。
最近我开始尝试借助AI工具辅助代码审计,希望把"人工经验"和"AI的代码理解能力"结合起来,提高发现问题的效率。本文记录一次初步的实践思路和过程,所有测试均在自己搭建的本地环境或明确授权的测试项目中进行。
二、工具与环境
- 开发框架:Spring Boot 2.x / 3.x
- 持久层:MyBatis / MyBatis-Plus
- 鉴权方式:JWT / Session
- AI工具:Claude、ChatGPT、GLM等大语言模型
- 辅助手段:Burp Suite抓包、IDEA断点调试、手工代码走查
三、为什么选择AI辅助审计
传统的人工代码审计有几个痛点:
- 项目代码量大,逐个文件阅读效率低;
- 有些越权漏洞藏在多层调用链中,人工追踪容易遗漏;
- 开发者容易陷入"自己写的代码没问题"的思维定势。
而AI的优势在于:
- 可以快速阅读大量代码,提炼出可疑点;
- 对Spring Boot等主流框架的常见写法非常熟悉;
- 能根据一段代码推测出可能的攻击路径;
- 可以辅助生成验证PoC和报告初稿。
但AI也有明显的短板:
- 容易产生"幻觉",把正常代码误报为漏洞;
- 不理解业务上下文,无法判断危害是否真实存在;
- 生成的报告往往"看起来很专业,但技术上很肤浅"。
因此,我的定位是:AI负责初筛和辅助,人负责判断和最终验证。
四、审计思路
我通常优先关注以下几类问题,因为它们性价比高、AI也相对擅长:
- 水平越权(IDOR):接口接收资源ID,但未校验该资源是否属于当前用户;
- 垂直越权:普通用户能调用管理员接口;
- 敏感信息泄露:接口返回了不该返回的字段,如密码、token、内部ID;
- 业务逻辑缺陷:如金额篡改、订单状态绕过、优惠券重复领取;
- API授权问题:未登录也能访问、token校验不严、权限注解缺失。
五、发现的可疑点(示例)
在一次对本地测试项目的审计中,AI辅助我定位到这样一个接口:
java
@GetMapping("/order/detail")
public Order getOrder(@RequestParam Long orderId) {
// 直接根据orderId查询,未校验当前用户
return orderService.getById(orderId);
}