为 Maven 项目运行静态分析

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

关于此任务

此任务描述如何使用 HCL AppScan 360° 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 文件提交到 AppScan 360°
    • 要生成 IRX 文件并将其发送到 AppScan 360° 服务以进行分析,请执行命令
      mvn package com.hcl.security:appscan-maven-plugin:analyze
      该命令将生成 IRX 文件并将其提交到 AppScan 360° 服务以进行分析。此任务需要使用应用程序标识 (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>" 命令行选项。缺省情况下,AppScan 360° 检测给定项目的源文件的名称空间,并将扫描的类添加到允许列表,以仅包括存在于同一名称空间中的类。将该属性设置为空字符串 ("") 将完全禁用白名单。
    注: 如果您想自行对插件进行修改,则可以在此处找到源代码。

使用 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