将扫描配置为通过 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
属性指定编译器选项。用分号分隔多个选项。
- 使用
- 对于 Java,可设置以下属性:
注: 通过这些属性设置的值将由子目标继承。例如,如果目标是 EAR 文件,其中包含 WAR 和 JAR 子目标,则会假定 WAR 和 JAR 具有为使用这些属性的 EAR 文件设置的相同值。 - 可以使用
- 使用
Include
子属性指定在扫描时要包含的文件模式 (<string_pattern>
)。Include
行为取决于目标类型,如目标包含和排除行为部分中所概述。要指定多个include
模式,请在其自己的<Include></Include>
标记中添加每个模式。例如,<Include>string_pattern_1</Include> <Include>string_pattern_2</Include>
注: 如果指定了冲突的include
和exclude
模式,则exclude
模式优先。 - 使用
Exclude
子属性指定在扫描时要排除的文件模式。Exclude
行为取决于目标类型,如目标包含和排除行为部分中所概述。要指定多个exclude
模式,请在其自己的<Exclude></Exclude>
标记中添加每个模式。注: 如果指定了冲突的include
和exclude
模式,则exclude
模式优先。
目标包含和排除行为
目标类型 | 行为 | 示例 |
---|---|---|
.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 文件。 |
|
目录 | 如果目标是目录,则可以包含或排除任何目标、目标类型或扫描文件的路径或文件名。 注: 指定目录时需要结尾反斜杠。 |
|
Web 服务器(请参阅系统要求以了解有关受支持 Web 服务器的信息) | 如果目标是 Web 服务器,则可以包含或排除在该服务器上部署的任何应用程序的文件名。 |
|
.sln (.NET) | 如果目标是包含 .NET 项目的 Visual Studio 解决方案文件,则可在解决方案中包含或排除由项目生成的任何 .NET 组合件的文件名。 |
|
.sln (C/C++) | 如果目标是包含不受管 C/C++ 项目的 Visual Studio 解决方案文件,则可包含或排除由任何项目生成的文件名。 |
|
配置文件示例
<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\lib 和 C:\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 文件,由于testexclude
模式优先于 *Account.jarinclude
模式,因此将排除此文件。