Fortify SCA 使用 Maven 插件排除多个目录/文件
Posted
技术标签:
【中文标题】Fortify SCA 使用 Maven 插件排除多个目录/文件【英文标题】:Fortify SCA exclude multiple directories/files with maven plugin 【发布时间】:2015-12-13 12:07:51 【问题描述】:抱歉,这个看似重复的问题,但其他 Fortify 解决方案似乎不适合我的情况。我正在通过 maven sca 插件进行扫描/上传
<plugin>
<groupId>com.fortify.ps.maven.plugin</groupId>
<artifactId>sca-maven-plugin</artifactId>
<version>4.20</version><!--$NO-MVN-MAN-VER$-->
<configuration>
<projectName>sample</projectName>
<projectVersion>$appVersion</projectVersion>
<exclude>**/*.(LOCAL|INT).*</exclude>
</configuration>
</plugin>
它可以工作
这会将所有 LOCAL 和 INT(集成测试)属性文件排除在扫描范围之外。此外,我还想排除已归档的 xsd 被扫描:
<exclude>**/(*.(LOCAL|INT).*)|(xsd/archive/*)</exclude>
但这不起作用。事实上,甚至没有找到原始的工作模式。有任何想法吗?
【问题讨论】:
这更像是一个正则表达式问题而不是一个 Maven 问题,也许你会更幸运地问一个关于这个正则表达式的特定问题。 我想标记它 maven 不会有帮助——我会删除 maven 标记。问题在于 fortify 如何评估 -exclude 标志值。常规的 unix 正则表达式似乎无法正常工作。 【参考方案1】:实际上,您可以通过这种方式破解它,而不是调整源代码:
<plugin>
<groupId>com.fortify.ps.maven.plugin</groupId>
<artifactId>sca-maven-plugin</artifactId>
<version>4.20</version>
<configuration>
<projectName>sample</projectName>
<projectVersion>$appVersion</projectVersion>
<exclude>**/*.(LOCAL|INT).*" -exclude "**/xsd/archive/*</exclude>
</configuration>
</plugin>
请注意排除标记内的 " -exclude "! ;)
【讨论】:
【参考方案2】:如果您查看 SCA 用户指南的 Appendix F: Maven Integration
部分,在 Excluding Files from the Scan
标题下,它会向您展示如何排除文件。它告诉您为属性使用单独的文件并设置com.fortify.sca.exclude
。相反,我会尝试只使用分号来分隔您的两个排除模式。
【讨论】:
是的,我看到了分号并尝试了,但它似乎不起作用。在maven插件中使用<exclude>
应该设置com.fortify.sca.exclude
:[warning]: No files were excluded as the file patterns: [**/*.(LOCAL|INT).*;**/xsd/archive/*] specified for -exclude option did not match any files.
我还想指出该指南关于 com.fortify.sca.exclude 的错误。当您在命令行上提供它时,它需要是-Dfortify.sca.exclude
。在我提供的解决方案中解释的更改之前,分号仍然不起作用【参考方案3】:
我将分享我的解决方案,尽管需要您访问 HP fortify 安装的一些工作:
我厌倦了为此烦恼一整天,所以我做了唯一明智的事情并重新编写了 fortify maven 插件的一部分!我喜欢分隔符为;
,所以我将mavin-plugin
文件夹下的TranslateMojo.java
文件更改如下,然后重新部署了fortify插件:
旧线:
addOptionValuePair("-exclude", exclude);
新线路:
if(exclude != null && exclude.length() > 0)
String[] excludeList = exclude.split(";");
for(int i = 0; i < excludeList.length; i++)
addOptionValuePair("-exclude", excludeList[i].trim());
现在我项目的.pom
有这个sca-maven-plugin
定义:
<plugin>
<groupId>com.fortify.ps.maven.plugin</groupId>
<artifactId>sca-maven-plugin</artifactId>
<version>4.20</version>
<configuration>
<projectName>sample</projectName>
<projectVersion>$appVersion</projectVersion>
<exclude>**/*.(LOCAL|INT).*;**/xsd/archive/*</exclude>
</configuration>
</plugin>
Maven 生成并在翻译步骤中使用的 sca-translate-war.txt 文件现在对提供的每个模式都有一个 -exclude :
"-exclude" "**/*.(LOCAL|INT).*" "-exclude" "**/xsd/archive/*"
这对我有用,并有望为某人节省几个小时的时间。
【讨论】:
【参考方案4】:对于无法让多个排除项起作用并考虑修补插件的任何人,请首先检查您是否使用了正确的分隔符。在 Windows 上必须是分号,在 Linux 上必须是冒号。
【讨论】:
在 Fortify 16.10+ 中,他们改变了您在 pom.xml 中提供排除文件的方式。现在是以上是关于Fortify SCA 使用 Maven 插件排除多个目录/文件的主要内容,如果未能解决你的问题,请参考以下文章