如何在Azure DevOps的OWASP ZAP扫描中通过XSLT添加误报排除规则
基于OWASPToNUnit3.XSLT过滤ZAP误报的实现方案
可以直接通过修改XSLT文件的匹配规则实现误报过滤,操作步骤如下:
- 第一步:提取待过滤误报的特征
先导出ZAP原生XML扫描报告,找到你判定为误报的alertitem节点,提取唯一标识字段,推荐优先用固定不变的pluginId(ZAP漏洞插件ID),也可以用risk(风险等级,可选值为High/Medium/Low/Informational)、name(漏洞名称)、description(漏洞描述)的特征关键词作为过滤依据。 - 第二步:修改XSLT的节点匹配逻辑
找到XSLT中遍历漏洞项的节点,通常是<xsl:for-each select="alertitem">或者匹配alertitem的模板,新增过滤条件即可:
例1:直接排除指定pluginId的误报和所有信息级漏洞,修改遍历语句为:<xsl:for-each select="alertitem[not(pluginId = '10015' or pluginId = '10027') and risk != 'Informational']">
例2:按漏洞名称关键词过滤,排除所有CSP相关误报,新增条件:not(contains(name, 'Content Security Policy')) - 第三步:可选的软过滤方案(保留忽略记录)
如果不想直接删除误报项,而是在NUnit报告中标记为已跳过,可修改alertitem的匹配模板为分支判断逻辑:<xsl:template match="alertitem"> <xsl:choose> <!-- 匹配预设的误报规则 --> <xsl:when test="pluginId = '10015' or pluginId = '10027'"> <test-case name="{name}" result="Skipped"> <reason> <message>已知误报,手动忽略</message> </reason> </test-case> </xsl:when> <!-- 正常漏洞走原有生成逻辑 --> <xsl:otherwise> <!-- 此处粘贴原有XSLT中生成NUnit测试用例的代码 --> </xsl:otherwise> </xsl:choose> </xsl:template> - 第四步:Pipeline配置适配
将修改后的XSLT文件提交到你的代码仓库中,在Azure Pipeline的报告转换步骤中,指定调用仓库内的自定义XSLT文件,避免使用公共默认文件导致过滤规则被覆盖。
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

