将扫描配置为通过 CLI 运行

您可以使用配置文件来定制如何通过命令行界面(使用 scan 命令)运行扫描 ,可在配置文件中指定单独的目标,也可包含或排除目标。此外,还可使用配置文件指定能够帮助生成完整扫描结果的其他信息。

配置文件用法

配置文件可用于指示在通过 CLI 进行扫描时要包含或排除哪些目标。还可以指定包含构建工件的目录,而且可以指定应该在扫描期间使用的构建信息(例如,可使用此设置来指定特定的 JDK 或 JSP 编译器)。

无论何时使用命令行实用程序 (CLI) 扫描文件夹,CLI 都会自动检查当前目录中是否存在 appscan-config.xml 文件。如果找到该文件,则将自动使用该文件。

配置文件模板和设置

准备配置文件时,请使用以下模板:

<Configuration attributes="true/false">
  <Targets>
    <Target outputs-only="true/false" path="scan_target_path">
      <CustomBuildInfo build_info="info"/>
      <Include>string_pattern</Include>
      <Exclude>string_pattern</Exclude>
    </Target>
  </Targets>
</Configuration>
使用可选配置属性来指定第三方和/或开放式源代码扫描,如下所示:
  • thirdParty="<true or false>" 启用第三方工件扫描。缺省值为 false
  • 除了其他相关扫描程序外,enableSecrets="true" 还支持使用密钥扫描程序扫描源文件。
  • openSourceOnly="<true or false>" 禁用安全扫描,并且仅运行开放式源代码分析。缺省值为 false
  • secretsOnly="true" 仅支持使用密钥扫描程序扫描源文件。
  • sourceCodeOnly="<true or false>" 仅扫描源文件,而忽略其他支持的文件类型(.dll.exe)。缺省值为 false
  • staticAnalysisOnly="<true or false>" 禁用开放式源代码分析,并且仅运行静态分析。缺省值为 false

使用 Targets 元素指示要扫描的目标。目标 (Target) 属性及子元素的用法如下:

  • 仅当您要扫描目录并强制 CLI 仅查找构建输出文件(例如,.jar.war.class 文件)时使用 Target 元素 outputs-only 属性。缺省情况下,此属性设置为 false。这意味着 CLI 将搜索目录以确定该目录是否为目标(例如,应用程序服务器或 Eclipse 工作空间),或者该目录是否包含诸如构建脚本、.pom 文件和 make 文件之类的项。如果要将扫描目标视为简单目录,并且只查找输出文件,请在 Target 元素中指定 outputs-only="true"

    例如,如果指定 <Target outputs-only="false" path="C:\Tomcat">,则 CLI 假定目标是 Tomcat 应用程序服务器,并搜索其部署的 .war 文件。但是,如果指定 <Target outputs-only="true" path="C:\Tomcat">,则 CLI 会将该位置视为目录,并在其中查找所有构建输出文件。

  • 使用 Target 元素 path 属性指定扫描目标或扫描目标目录的路径。指定目录时,在扫描期间将包含其所有子目录。

    例如,如果指定 <Target outputs-only="false" path="C:\WebSphere\AppServer85\profiles\AppSrv01">,CLI 会在 AppSrv01 配置文件中查找所有已部署的 .ear 文件。如果指定 <Target outputs-only="false" path="C:\WebSphere\AppServer85">,CLI 会在所有配置文件中查找所有已部署的 .ear 文件。

  • 还可以指定这些可选的 Target 子元素:
    • 可以使用 CustomBuildInfo 元素来设置属性。通过使用这部分模板,
      
      <CustomBuildInfo build_info="info"/>
      可根据目标语言来指定构建信息。对于某些语言,可设置多个属性, 例如可根据目标语言设置 <CustomBuildInfo build_info_1="info_1" build_info_2="info_2" build_info_3="info_3"/>
      • 对于 Java,可设置以下属性:
        <CustomBuildInfo additional_classpath="dependency_path"
          jdk_path="JDK_path" jsp_compiler="JSP_compiler_path" package_includes="namespaces" package_excludes="namespaces"/>
        • 使用 additional_classpath 属性指定更多类路径。在 Windows 上,使用分号分隔多个类路径。在 Linux 和 macOS 上,使用冒号分隔多个类路径。
        • 使用 jdk_path 属性指定 JDK 安装的路径。
        • 使用 jsp_compiler 属性指定 JSP 编译器的路径,例如:
          jsp_compiler="C:\Tomcat"
          jsp_compiler="C:\Program Files (x86)\IBM\WebSphere\AppServer"
          jsp_compiler="C:\Oracle"
        • 使用 package_includes 属性覆盖现有的第三方排除项,并仅扫描来自给定名称空间的那些类。使用分号分隔名称空间列表。例如:
          package_includes="com.hcl.example;com.hcl.sample"
        • 使用 package_excludes 属性将指定的名称空间追加到现有第三方排除项列表。使用分号分隔名称空间列表。
        • 使用 <CustomBuildInfo> 标记中的 irx_minor_cache_home 属性来设置 Java 并行处理高速缓存位置。该值应该指向用于高速缓存的位置。例如:
          <CustomBuildInfo irx_minor_cache_home="X:/mycache"/>
      • 对于提供的 Tomcat 下的 JSP,可以设置以下属性:
        <CustomBuildInfo jsp_compiler_args="-ARGUMENTS"/>
        • 使用 jsp_compiler_args 属性指定 JSP 编译器命令行参数以设置或覆盖 JSP 编译器。
      • 对于 .NET(仅限 Windows),可设置以下属性:
        <CustomBuildInfo references="assembly_references"
          configuration="build_configuration"/>
        • 使用 references 属性添加组合件引用。用分号分隔多个引用。
        • 使用 configuration 属性可包含 Visual Studio 解决方案发现的构建配置。
        • 使用 package_includes 属性覆盖现有的第三方排除项,并仅扫描来自给定名称空间的那些类。使用分号分隔名称空间列表。例如:
          package_includes="com.hcl.example;com.hcl.sample"
        • 使用 package_excludes 属性将指定的名称空间追加到现有第三方排除项列表。使用分号分隔名称空间列表。
      • 对于 C/C++(仅限 Windows),可设置以下属性:
        <CustomBuildInfo configuration="build_configuration"
          include_paths="include_directories" macros="macros" compiler_opts=/>
        • 使用 configuration 属性可包含构建配置。
        • 使用 include_paths 属性指定包含路径。用分号分隔多个包含路径。
        • 使用 macros 属性包含宏。用分号分隔多个宏。
        • 使用 compiler_opts 属性指定编译器选项。用分号分隔多个选项。
    注: 通过这些属性设置的值将由子目标继承。例如,如果目标是 EAR 文件,其中包含 WARJAR 子目标,则会假定 WARJAR 具有为使用这些属性的 EAR 文件设置的相同值。
  • 使用 Include 子属性指定在扫描时要包含的文件模式 (<string_pattern>)。Include 行为取决于目标类型,如目标包含和排除行为部分中所概述。要指定多个 include 模式,请在其自己的 <Include></Include> 标记中添加每个模式。例如,
    <Include>string_pattern_1</Include>
    <Include>string_pattern_2</Include>
    注: 如果指定了冲突的 includeexclude 模式,则 exclude 模式优先。
  • 使用 Exclude 子属性指定在扫描时要排除的文件模式。Exclude 行为取决于目标类型,如目标包含和排除行为部分中所概述。要指定多个 exclude 模式,请在其自己的 <Exclude></Exclude> 标记中添加每个模式。
    注: 如果指定了冲突的 includeexclude 模式,则 exclude 模式优先。

目标包含和排除行为

1. 目标包含和排除行为

下表按目标类型概述了包含和排除设置的行为。

目标类型 行为 示例
.dll 如果目标为 .dll 文件,则包含或排除目标对扫描没有影响,因为这些文件无法包含目标。
.jar 如果目标为 .jar 文件,则可以排除 .jar 文件中的 .class 文件。 *MyClass.class
.war 如果目标为 .war 文件,则可以排除 .class.jsp 以及 JavaScript 文件类型和 WEB-INF/lib 中的 .jar 文件。
注: 缺省情况下,.jar 文件被视为第三方代码,并添加到 .war 文件的类路径(缺省情况下会排除这些文件)。
com.ibm.*.jar
.ear 如果目标为 .ear 文件,则可以包含或排除 .jar.war 文件。
  • com.ibm.*.jar
  • JSPWiki.war
目录 如果目标是目录,则可以包含或排除任何目标、目标类型或扫描文件的路径或文件名。
注: 指定目录时需要结尾反斜杠。
  • com.ibm.*.jar
  • test/: 包含或排除 test/ 目录及其子目录中的所有内容。
  • test/*.jar: 包含或排除 test/ 目录(但其子目录除外)中的所有 .jar 文件。
  • myFile.js
Web 服务器(请参阅系统要求以了解有关受支持 Web 服务器的信息) 如果目标是 Web 服务器,则可以包含或排除在该服务器上部署的任何应用程序的文件名。
  • JSPWiki.war
  • MyApp.ear
  • *.war (目标为 Tomcat 服务器时)
.sln (.NET) 如果目标是包含 .NET 项目的 Visual Studio 解决方案文件,则可在解决方案中包含或排除由项目生成的任何 .NET 组合件的文件名。
  • *\MyLib.dll
  • *\MyApp.exe
.sln (C/C++) 如果目标是包含不受管 C/C++ 项目的 Visual Studio 解决方案文件,则可包含或排除由任何项目生成的文件名。
  • *\myProject.vcxproj

配置文件示例

<Configuration>
  <Targets>
    <Target path="C:\test\MyApplication.ear">
      <CustomBuildInfo additional_classpath="C:\java\lib;C:\java2\lib"
        jdk_path="C:\Program Files\Java\jdk1.7" jsp_compiler="C:\Tomcat"/>
      <Include>ShoppingCart.war</Include>
      <Include>*Account.jar</Include>
      <Exclude>thirdPartyJars/</Exclude>
      <Exclude>*test*</Exclude>
    </Target>
  </Targets>
</Configuration>
在此配置文件中:
  • C:\test\MyApplication.ear 是目标。
  • C:\java\libC:\java2\lib 将被搜索,以查找编译所需的任何类文件依赖关系。
  • C:\Program Files\Java\jdk1.7 用于查找依赖关系。
  • 会将 C:\Tomcat 编译器用于 JSP 编译,而不会使用 CLI 随附的 Apache Tomcat V7 应用程序。
  • 通过 CLI 进行扫描时,将包含 ShoppingCart.war 文件以及以 *Account.jar 结尾的所有文件。将排除 EAR 文件的 thirdPartyJars/ 中的全部内容,同时排除文件名中包含字符串 test 的任何文件。如果存在冲突,则 exclude 模式优先。例如,如果 EAR 文件包含 testCustomerAccount.jar 文件,由于test exclude 模式优先于 *Account.jar include 模式,因此将排除此文件。