You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.

Loading...

本站原创:Fortify 实战:Java Web 应用代码审计与漏洞修复


在企业级应用开发中,静态应用安全测试(SAST) 是保障代码安全的关键环节,本文由守阙安全团队制作,选用 Fortify SCA CE 24.2.0(全称:Fortify Static Code Analyzer Community Edition 24.2.0)作为审计工具,聚焦典型的 Java Web 登录接口场景,完整演示从项目扫描、漏洞定位、人工验证到修复验证的全流程,帮助开发者掌握“工具扫描+人工核验”的代码审计实战方法。

一、审计场景

1、场景说明

我们以一个电商平台的 用户登录接口 为审计目标,核心代码如下。

20260205_01

2、潜在风险点

1)SQL 注入:直接拼接用户输入构造 SQL 语句,未做任何过滤。
2)硬编码敏感信息:数据库地址、账号、密码直接写在代码中,存在泄露风险。
3)异常处理不规范:捕获所有异常后仅打印堆栈,未做安全日志记录,不利于问题追溯。

二、Fortify 扫描流程

1、项目配置与扫描

打开 Fortify SCA CE 24.2.0,创建新的扫描任务;选择项目类型为 Java,指定源码目录(包含上述 UserLogin.java);配置扫描规则集:选择 “OWASP Top 10 2021” + “CWE Top 25” 规则包;启动扫描,等待分析完成。

2、扫描结果解读

Fortify 会生成可视化审计报告,核心漏洞如下。

20260205_02

三、人工验证

Fortify 扫描结果存在一定误报可能,需通过人工验证确认漏洞真实性与危害程度。

1、SQL 注入漏洞验证

构造恶意输入 username=' OR '1'='1,password=任意值。代入代码后,SQL 语句被拼接为:

20260205_03

由于 OR '1'='1' 恒成立,该语句会返回所有用户数据,直接绕过登录验证。确认为真实高危漏洞,可被攻击者利用实现未授权访问。

2、硬编码密码验证

直接查看代码与编译产物(如 Jar 包)。数据库账号密码以明文形式存在于源码和字节码中,通过反编译工具可直接读取,无任何保护措施。

结论:确认为真实高危漏洞,代码泄露即导致数据库完全暴露。

3、不当异常处理验证

模拟数据库连接失败场景,观察异常输出。异常堆栈直接打印到控制台,包含数据库地址、驱动类名等敏感信息,无日志记录,无法追溯攻击尝试。

结论:确认为真实中危漏洞,存在信息泄露与攻击追溯困难的风险。

四、漏洞修复与回归测试

1、SQL 注入漏洞修复

修复方案:使用 PreparedStatement 预编译语句,避免直接拼接 SQL。

20260205_04

2、硬编码敏感信息修复

修复方案:将敏感信息存入环境变量或配置文件,通过配置中心读取。

20260205_05

3、异常处理优化

修复方案:使用日志框架记录安全事件,避免暴露敏感信息。

20260205_06

4、回归测试

漏洞修复完成后,开展回归测试,验证漏洞是否彻底修复、修复过程是否引入新漏洞,测试流程如下。

1) 原有的 SQL 注入、硬编码密码高危漏洞已完全消除。
2) 异常处理优化后,中危漏洞风险等级降至“信息类”,符合安全规范。
3) 再次注入 username=' OR '1'='1,登录失败,SQL 注入风险已阻断。
4) 代码中无明文敏感信息,异常信息仅记录脱敏日志,无敏感泄露。

五、结语

本文通过 Java Web 登录接口 的实战场景,完整演示了“Fortify 扫描+人工验证”的代码审计全流程,覆盖漏洞发现、验证、修复与回归测试。对于追求代码安全的开发者和团队而言,Fortify 是一款高效、精准的安全工具,结合人工核验与回归测试,能最大程度保障应用安全,避免漏洞残留或修复引入新风险,构建更可靠的业务系统。