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插件中使用&lt;exclude&gt;应该设置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 插件排除多个目录/文件的主要内容,如果未能解决你的问题,请参考以下文章

Fortify SCA 和 Fortify SSC 之间的区别

如何区分 Fortify SCA 扫描

使用 maven sca 插件强化扫描

Fortify SCA 脚本扫描 shell 脚本

java源代码安全审计

Fortify SCA 在可执行文件或 .o 文件上构建