将扫描配置为通过 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 仅查找构建输出文件(例如,
Target、outputs-only和.jar文件)时使用.war元素.class属性。缺省情况下,将此属性设置为false。这意味着 CLI 将搜索目录以确定该目录是否为目标(例如,应用程序服务器或 Eclipse 工作空间),或者该目录是否包含诸如构建脚本、Maven.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属性指定扫描目标或扫描目标目录的路径 (<scan_target_path>)。指定目录时,在扫描期间将包含其所有子目录。例如,如果指定
<Target outputs-only="false" path="C:\WebSphere\AppServer85\profiles\AppSrv01">,CLI 会在.ear配置文件中查找所有已部署的AppSrv01文件。如果指定<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 文件。 |
|
| directory | 如果目标是目录,则可以包含或排除任何目标、目标类型或扫描文件的路径或文件名。 注: 指定目录时需要结尾反斜杠。 |
|
| 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 进行扫描时,将包含 ShoppingCart.war 文件以及以 *Account.jar 结尾的所有文件。将排除 EAR 文件的 thirdPartyJars/ 中的全部内容,同时排除文件名中包含字符串 test 的任何文件。如果存在冲突,则
exclude模式优先。例如,如果 EAR 文件包含 testCustomerAccount.jar 文件,由于 testexclude模式优先于 *Account.jarinclude模式,因此将排除此文件。