为 Gradle 项目运行静态分析

要启动文件的分析,必须生成将提交到云的 IRX 文件。HCL AppScan on Cloud Gradle 插件用于自动扫描 Gradle 中的 Java 和 Java Web 项目。它为应用了“java”插件和/或“war”插件的 Gradle 项目生成 IRX 文件。它还可以将生成的 IRX 文件提交到 ASoC 服务以进行自动分析。有关应用插件以及确定最新插件版本的信息,请参阅 Gradle 插件

过程

要为 Gradle 项目生成 IRX 文件:
  1. 在命令提示符处,发出命令以将目录切换到包含您的 Gradle 项目的位置。
  2. 设置 APPSCAN_OPTS 环境变量,以在运行扫描之前指定全局选项。
    使用 APPSCAN_OPTS 设置扫描速度,启用密钥扫描,启用调试日志记录等。
  3. 发出以下某个命令:
    • 要仅生成 IRX 文件,请发出 appscan-prepare

      该命令为构建中的所有 Java 和 War 项目生成一个 IRX 文件。缺省情况下,IRX 文件在根项目的构建目录中生成。您可以稍后将 IRX 文件提交到 ASoC。

    • 要生成 IRX 文件并将其发送到 ASoC 服务以进行分析,请发出 appscan-analyze

      该命令将生成 IRX 文件并将其提交到 ASoC 服务以进行分析。此任务需要 API 密钥、密码和应用程序标识。

    可配置选项

    可以使用 -Doption=value 语法通过命令行上的 JVM 参数或通过构建脚本中的 appscanSettings 块来设置以下选项。

    1. Gradle 插件的可配置选项
    选项 缺省值 描述
    irxName 根项目的名称 。 生成的 .irx 文件的名称。
    irxDir 根项目的构建目录。 生成的 .irx 文件的位置。
    appId 空值。对于 appscan-analyze 是必需的 ASoC 服务中应用程序的标识。
    appscanKey 空值。对于 appscan-analyze 是必需的 用户的 API 密钥以供认证。
    appscanSecret 空值。对于 appscan-analyze 是必需的 用户的 API 私有密钥以供认证。
    namespaces 空值。 覆盖自动名称空间检测。设置为 "" 以禁用名称空间检测。
    示例 1:在命令行中指定选项:
    gradle appscan-prepare -DirxName=MyApp
    示例 2:在构建脚本中指定选项:
    appscanSettings {
    	irxName="MyApp"
    	irxDir="/myApplication/sample"
    }
    
    注: appscan密钥和 appscan密码选项可以在用户的 Gradle.properties 文件中指定。这避免了在构建脚本或命令行中指定认证信息的需要。例如,将以下行添加到 ~/.gradle/gradle.properties 文件(如果文件不存在,则创建该文件):
    appscanKey="2358cd02-3fs3-322c-62c9-b5cc63c61f2a"
    appscanSecret="qU939siTXgF7csk3jSig+Vza7ilWLu/Uy/ReWye5E/c="
    
    您可以在此处生成 API 密钥/私有密钥。有关更多信息,请参阅 生成 API 密钥
    注: 要覆盖缺省名称空间行为,请使用 -Dnamespaces="<semi-colon delimited list of namespaces to scan>" 命令行选项。缺省情况下,ASoC 检测给定项目的源文件的名称空间,并将扫描的类添加到允许列表,以仅包括存在于同一名称空间中的类。将该属性设置为空字符串 ("") 将完全禁用白名单。
    注: 如果您想自行对插件进行修改,则可以在此处找到源代码。

使用 Gradle 插件加密 appscanSecret

关于此任务

要加密 API 密钥,请使用 Gradle 凭证插件和 appscan-gradle-plugin
注: 最新版本的凭证插件需要 Gradle 5.0 或更高版本。有关插件的其他信息,请参阅 gradle-credentials-plugin

过程

  1. 将凭证插件与 appscan-gradle-plugin 一起应用到您的项目中:
    plugins {
    	id 'nu.studer.credentials' version '2.1'
    	id ' com.hcl.security.appscan' version '1.0.2'
    }
  2. 运行以下命令以加密 API 密钥:
    gradle addCredentials --key appscanSecret --value Yq9M+iFHyhRU2eEx+XobXwhX9xoW4hEXWz2fJDI8I=1
    缺省情况下,加密值将存储在 ~/.gradle/ gradle.encrypted.properites 中并从中检索。使用 credentialsLocation 属性指定其他位置。
    gradle addCredentials --key appscanSecret --value Yq9M+iFHyhRU2eEx+XobXwhX9xoW4hEXWz2fJDI8I=1 -PcredentialsLocation=/some/directory
  3. 使用构建脚本中的 appscanSettings 块设置 appscanKey 值和加密的 appscanSecret 值:
    appscanSettings {
    	appscanKey=22iFHyhRU2eEx+XobXwhX9xoW4hEXWz2fJDI8I=1
    	appscanSecret=credentials.appscanSecret
    appId=95e69f47-9547-4378-ab93-f5d48ada52cc1
    }
    您也可以在这里设置 ASoC appId
  4. 运行 appscan-analyze
    gradle appscan-analyze
    如果未在构建脚本中指定 appId,请在运行时在命令行上设置它:
    gradle appscan-analyze -DappId=95e69f47-9547-4378-ab93-f5d48ada52cc1
    如果在加密 appscanSecret 值时使用了 credentialsLocation 属性,请在运行时也指定该属性:
    gradle appscan-analyze -PcredentialsLocation=/some/directory