Fortify CLI自动化报表实现咨询:区分有无新漏洞场景
你的这个方案完全可行!用FPRUtility对比新旧FPR并通过issue age:new查询来判断新问题,是Fortify自动化流程里很常见的做法,刚好能满足你区分两种报表的需求。下面我一步步拆解具体实现方式:
首先明确:这个方案完全可行。Fortify的FPRUtility工具本身就支持FPR文件的合并、查询和分析,通过对比新旧FPR并筛选age:new的问题,正好可以精准判断最新扫描是否产生了新问题,进而触发不同的报表生成逻辑。
1. 准备新旧FPR文件
- 确保你已经有历史扫描的旧FPR文件(比如命名为
old_scan.fpr)和最新扫描生成的新FPR文件(比如new_scan.fpr)。 - 首次自动化的话,可以把第一次扫描的结果作为初始基准旧FPR。
2. 合并新旧FPR文件
使用FPRUtility的merge命令,将旧FPR合并到新FPR中,这样合并后的文件会保留两次扫描的问题对比信息,Fortify会自动标记每个问题的age属性:
FPRUtility -merge -project new_scan.fpr -source old_scan.fpr -output merged_scan.fpr
说明:合并后的
merged_scan.fpr里,age:new代表最新扫描新增的问题,age:existing代表历史已存在的问题。
3. 查询并判断是否存在新问题
用FPRUtility的query命令筛选age:new的问题,通过输出文件的内容来判断是否有新问题:
FPRUtility -query -project merged_scan.fpr -filter "age:new" -output new_issues.txt
然后在脚本里做判断(以Shell脚本为例):
if [ -s new_issues.txt ]; then # 存在新问题,触发新问题报表生成逻辑 echo "检测到新安全问题,生成对应PDF报表" else # 无新问题,触发无新问题报表生成逻辑 echo "最新扫描无新问题,生成确认PDF报表" fi
小技巧:
-s用来检查文件是否非空,比单纯判断文件存在更可靠,避免空文件干扰判断。
4. 生成对应PDF报表
根据判断结果,调用Fortify的ReportGenerator工具生成不同的PDF:
有新问题时的报表
可以专门生成只包含新问题的明细报表,方便开发排查:
ReportGenerator -format pdf -f new_issues_report.pdf -source merged_scan.fpr -filter "age:new" -template "Developer Workbook"
无新问题时的报表
可以生成简洁的汇总报表,适合同步给管理层:
ReportGenerator -format pdf -f no_new_issues_report.pdf -source merged_scan.fpr -template "Executive Summary" -title "最新扫描无新安全问题"
说明:
-template参数可以选择Fortify自带的模板,Developer Workbook侧重问题细节,Executive Summary侧重汇总信息,你也可以自定义模板适配需求。
5. 自动化脚本封装
把上面的步骤整合成可复用的Shell脚本(Windows下可以用批处理或PowerShell):
#!/bin/bash # 定义文件路径 OLD_FPR="old_scan.fpr" NEW_FPR="new_scan.fpr" MERGED_FPR="merged_scan.fpr" NEW_ISSUES_TXT="new_issues.txt" # 合并新旧FPR文件 echo "正在合并新旧扫描文件..." FPRUtility -merge -project $NEW_FPR -source $OLD_FPR -output $MERGED_FPR # 查询新增问题 echo "正在检测新问题..." FPRUtility -query -project $MERGED_FPR -filter "age:new" -output $NEW_ISSUES_TXT # 判断并生成对应报表 if [ -s $NEW_ISSUES_TXT ]; then echo "发现新问题,生成问题明细报表..." ReportGenerator -format pdf -f new_issues_report.pdf -source $MERGED_FPR -filter "age:new" -template "Developer Workbook" else echo "无新问题,生成安全确认报表..." ReportGenerator -format pdf -f no_new_issues_report.pdf -source $MERGED_FPR -template "Executive Summary" -title "最新扫描无新安全问题" fi # 清理临时文件(可选) rm $MERGED_FPR $NEW_ISSUES_TXT
- 确保Fortify CLI的环境变量已配置,
FPRUtility和ReportGenerator能直接在命令行调用; - 旧FPR里标记的误报会被保留到合并后的文件中,所以新报表不会包含已确认的误报;
- 可以根据需求调整筛选条件,比如加上
status:open只关注未关闭的问题。
内容的提问来源于stack exchange,提问作者S Ligade

