Java Web代码审计是通过分析应用程序源代码,识别潜在安全漏洞的过程。主要目标是发现可能导致数据泄露、未授权访问或其他安全威胁的编码缺陷。
环境搭建
获取代码
工具准备
// 不安全示例
String userInput = request.getParameter("input");
String sql = "SELECT * FROM users WHERE id = " + userInput;
// 安全做法应使用预编译语句
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
stmt.setString(1, userInput);
审计重点: - 查找直接拼接SQL的代码 - 检查XSS防护措施(输出编码) - 验证文件上传的内容类型和扩展名
// 不安全示例 - 硬编码凭证
String password = "admin123";
// 不安全示例 - 弱会话管理
HttpSession session = request.getSession();
session.setAttribute("isAdmin", true);
审计重点: - 密码存储方式(是否加盐哈希) - 会话超时设置 - 敏感操作的多因素认证 - CSRF防护措施
// 不安全示例 - 前端控制
if (userRole.equals("admin")) {
// 显示管理功能
}
// 后端必须重复验证
if (!userService.hasPermission(userId, "admin")) {
throw new AccessDeniedException();
}
审计重点: - 水平越权(同一角色访问他人数据) - 垂直越权(低权限访问高权限功能) - 直接对象引用(IDOR)
// 不安全示例 - 日志记录敏感信息
logger.info("User " + username + " logged in with password: " + password);
// 安全做法
logger.info("User " + username + " logged in");
审计重点: - 敏感信息加密存储 - 日志中的敏感数据 - 内存中的敏感数据清理
检查点: - 已知漏洞组件版本 - 不安全的API使用方式 - 过度权限的依赖库
SQL注入
XSS漏洞
文件操作漏洞
反序列化漏洞
XXE漏洞
FindSecBugs使用
# Maven项目中集成
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.5</version>
<configuration>
<plugins>
<plugin>
<groupId>com.h3xstream.findsecbugs</groupId>
<artifactId>findsecbugs-plugin</artifactId>
<version>LATEST</version>
</plugin>
</plugins>
</configuration>
</plugin>
SonarQube规则配置
漏洞描述
修复建议
验证方案
通过系统化的代码审计,可以显著提高Java Web应用的安全性,减少潜在的安全风险。