为 Maven 项目运行静态分析

要启动文件的分析,必须生成将提交到云的 IRX 文件。HCL AppScan on Cloud Maven 插件用于自动扫描 Maven 中的 jarwarear 项目。它将为具有“ jar”、“ war”和“ ear”封包类型的 Maven 项目生成 IRX 文件。它还可以将生成的 IRX 文件提交到 ASoC 服务以进行自动分析。如果要扫描 Maven 项目,请遵循以下指示信息来创建该文件。

关于此任务

此任务描述如何使用 HCL AppScan on Cloud Maven 插件为 Maven 项目运行静态分析:

过程

  1. 在命令提示符处,发出命令以将目录切换到包含 Maven 项目的位置(包含 pom.xml 文件的文件夹)。
  2. 设置 APPSCAN_OPTS 环境变量,以在运行扫描之前指定全局选项。
    使用 APPSCAN_OPTS 设置扫描速度,启用密钥扫描,启用调试日志记录等。
  3. 发出以下某个命令:
    • 要仅生成 IRX 文件,请发出:
      mvn com.hcl.security:appscan-maven-plugin:prepare
      该命令为构建中的所有 jarwarear 项目生成一个 IRX 文件。缺省情况下,IRX 文件在根项目的目标目录中生成。您可以稍后将 IRX 文件提交到 ASoC
    • 要生成 IRX 文件并将其发送到 ASoC 服务以进行分析,请执行命令
      mvn package com.hcl.security:appscan-maven-plugin:analyze
      该命令将生成 IRX 文件并将其提交到 ASoC 服务以进行分析。此任务需要使用应用程序标识 (appId)、API 密钥 (appscanKey) 和 API 密钥 (appscanSecret)。
      注: 如果 Maven 项目具有针对同一反应器构建中另一个项目的编译时依赖关系,则现有 Maven 错误可能导致命令失败。要解决此问题,请执行 package 目标以及 prepareanalyze 目标。例如:
      mvn package com.hcl.security:appscan-maven-plugin:prepare
      或者
      mvn package com.hcl.security:appscan-maven-plugin:analyze
    1. Maven 插件的可配置选项
    选项 缺省值 描述
    output
    <root project>/target/<root project name>.irx
    生成的 IRX 文件的名称和/或位置。如果所选路径不存在,则应用缺省路径 (<root project>/target/<root project name>.irx)
    appId

    空值。对于 analyze 是必需的。

    云服务中的应用程序的标识。
    appscanKey

    空值。对于 analyze 是必需的。

    用于标识的用户的 API 密钥标识。
    appscanSecret

    空值。对于 analyze 是必需的。

    用户的 API 私有密钥以供认证。
    namespaces 空值。 覆盖自动名称空间检测。设置为 "" 以禁用名称空间检测。
    提示: Command Line Utility 包含 Tomcat JSP 编译器。缺省情况下,在生成 IRX 文件期间会使用此 JSP 编译器。如果要为 warear 文件生成 IRX 文件,且希望使用其他 JSP 编译器,请发出带 -DjspCompiler 选项的命令。例如:
    mvn com.hcl.security:appscan-maven-plugin:prepare -DjspCompiler=<jsp_compiler>

    其中,<jsp_compiler> 是要使用的 JSP 编译器的路径,用于指定服务器的根目录。

    提示: 缺省情况下,IRX 文件生成期间不扫描第三方代码。可通过遵循 管理第三方 Java 和 .NET 排除 中的指示信息来修改第三方代码排除设置。要包含第三方代码,请发出带有 -DthirdParty 选项的命令。

    如果您是扫描中通常排除的第三方代码的开发人员,应使用该设置来包含第三方代码。

    提示: 可通过以下两种方法之一缩短上述命令:
    • 将以下内容添加到 pom.xml 文件的 <plugins> 部分:
      <plugin>
        <groupId>com.hcl.security</groupId>
        <artifactId>appscan-maven-plugin</artifactId>
        <version>1.0.10</version>
      </plugin>
      使用此方法,您可以编辑 pom.xml 文件,然后所有其他用户会自动获得更改。但是,必须指定版本号,因此当有较新的版本可用时,需要手动编辑和更新 pom.xml 文件。
    • groupId (com.hcl.security) 添加到 Maven settings.xml 中的插件组列表。例如,将以下内容添加到 ~/.m2/settings.xml${maven.home}/conf/settings.xml
      <pluginGroups>
        <pluginGroup>com.hcl.security</pluginGroup>
      </pluginGroups>
      执行此编辑之后,您可以使用 appscan 前缀执行 prepare 目标。例如:
      mvn appscan:prepare

    有关更多信息,请参阅配置 Maven 以搜索插件

    注: 要覆盖缺省名称空间行为,请使用 -Dnamespaces="<semi-colon delimited list of namespaces to scan>" 命令行选项。缺省情况下,ASoC 检测给定项目的源文件的名称空间,并将扫描的类添加到允许列表,以仅包括存在于同一名称空间中的类。将该属性设置为空字符串 ("") 将完全禁用白名单。
    注: 如果您想自行对插件进行修改,则可以在此处找到源代码。

使用 Maven 插件加密 appscanSecret

关于此任务

使用 appscan-maven-plugin 加密 API 密钥。在此处查看在 Maven 中加密密码的提示和技巧。

过程

  1. 运行以下命令以生成加密的主密码:
    mvn -emp myMasterPassword
  2. 将输出复制到 ~/.m2/settings-security.xml,并将其放入 <master> 标记的值中:
    <settingsSecurity>
      <master>{rsB56BJcqoEHZqEZ0R1VR4TIspmODx1Ln8/PVvsgaGw=}</master>
    </settingsSecurity>
    注: 您可以将 settings-security.xml 文件存储在其他位置。如果这样做,则必须在运行时使用选项 -Dsettings.security=path/to/security-settings.xml 指定位置。
  3. 运行以下命令以生成加密的 API 密钥:
    mvn -ep apiSecret
  4. 将命令的输出复制到 ~/.m2/settings.xml 并放入 <password> 标记的值中。<username> 标记应包含用户的 API 密钥的值:
    <settings>
      <servers>
        <server>
          <id>appscan</id>
                    <username>MyapiKey</username>
    <password>{uMrbEOEf/VQHnc0W2X49Qab75j9LSTwiM3mg2LCrOzI=}</password>
        </server>
      </servers>
      ...
    </settings>
  5. 使用 Maven 插件执行 analyze 目标:
    mvn com.hcl.security:appscan-maven-plugin:analyze -DappId=X49Qab75j9LSTwiM3mg2LCrO
    如果将 settings-security.xml 文件置于非缺省位置,那么必须在运行时指定该位置:
    mvn com.hcl.security:appscan-maven-plugin:analyze -DappId=X49Qab75j9LSTwiM3mg2LCrO -Dsettings.security=path/to/security-settings.xml