配置掃描以透過 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
  • openSourceOnly="<true or false>" 停用安全掃描,並且僅執行開放程式碼分析。預設值是 false
  • sourceCodeOnly="<true or false>" 只會掃描原始檔,並忽略其他支援的檔案類型 (.dll.exe)。預設值是 false
  • staticAnalysisOnly="<true or false>" 停用開放原始碼掃描,並且只會執行靜態分析。預設值是 false

使用 Targets 元素來指示要掃描的目標。目標 (Target) 屬性及子元素的用法如下所示:

  • 只有在您想要掃描目錄並強制指令行公用程式僅尋找建置輸出檔(例如 .jar.war.class 檔案)時,才使用 Target 元素 outputs-only 屬性。此屬性預設是設定為 false。這表示 CLI 會搜尋該目錄,以判定它是否為目標(例如應用程式伺服器或 Eclipse 工作區)- 或者該目錄是否包含建置 Script、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 會尋找 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 上,使用冒號區隔多個類別路徑。
        • 使用 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 屬性指定編譯器選項。請以分號區隔多個選項。
    註: 這些屬性設定的值由子目標繼承。例如,若目標是 EAR 檔案,其中納入 WARJAR 子目標,則會假設 WARJAR 含有使用這些屬性對 EAR 檔案設定的相同值。
  • 當您掃描時,請使用 Include 子元素指定要納入的檔案型樣 (<string_pattern>)。Include 行為視目標類型而定,如目標納入及排除行為小節所概述。若要指定多個 include 型樣,請在型樣本身的 <Include></Include> 標記中新增每一個型樣。例如,
    <Include>string_pattern_1</Include>
    <Include>string_pattern_2</Include>
    註: 如果您指定的 includeexclude 型樣發生衝突,則以 exclude 型樣為優先。
  • 當您掃描時,請使用 Exclude 子元素指定要排除的檔案型樣。Exclude 行為視目標類型而定,如目標納入及排除行為小節所概述。若要指定多個 exclude 型樣,請在型樣本身的 <Exclude></Exclude> 標記中新增每一個型樣。
    註: 如果您指定的 includeexclude 型樣發生衝突,則以 exclude 型樣為優先。

目標納入及排除行為

1. 目標納入及排除行為

此表格概述依目標類型列出的納入及排除設定行為。

目標類型 行為 範例
.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 檔案。
  • com.ibm.*.jar
  • JSPWiki.war
目錄 如果您的目標是目錄,則可以納入或排除任何目標、目標類型或掃描檔案的路徑或檔名。
註: 指定目錄時,需要具有尾端斜線。
  • com.ibm.*.jar
  • test/:納入或排除 test/ 目錄及其子目錄中的所有項目。
  • test/*.jar:納入或排除 test/ 目錄(但不含其子目錄)中的所有 .jar 檔案。
  • myFile.js
Web 伺服器(請參閱系統需求以瞭解支援的 Web 伺服器) 如果您的目標是 Web 伺服器,則可以納入或排除伺服器上所部署的任何應用程式的檔名。
  • JSPWiki.war
  • MyApp.ear
  • *.war(當目標是 Tomcat 伺服器時)
.sln (.NET) 如果目標是包含 .NET 專案的 Visual Studio 解決方案檔案,您可以納入或排除解決方案中的專案所產生的任何 .NET 組件檔名。
  • *\MyLib.dll
  • *\MyApp.exe
.sln (C/C++) 如果目標是包含未受管理的 C/C++ 專案的 Visual Studio 解決方案檔案,您可以納入或排除任何專案的檔名。
  • *\myProject.vcxproj

配置檔範例

<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\libC:\java2\lib 中搜尋是否有編譯所需的任何類別檔相依關係。
  • C:\Program Files\Java\jdk1.7 用來尋找相依關係。
  • 系統會使用 C:\Tomcat 編譯器來編譯 JSP, 而不是使用 CLI 隨附的 Apache Tomcat 第 7 版應用程式。
  • 當您透過 CLI 掃描時,會納入 ShoppingCart.war 檔案,結尾是 *Account.jar 的所有檔案也是。EAR 檔案的 thirdPartyJars/ 中的一切都會被排除,且其檔名中有 test 字串的任何檔案也一樣被排除。如果發生衝突,則以 exclude 型樣為優先。例如,若 EAR 檔案包含 testCustomerAccount.jar 檔案,則會排除它,因為 test exclude 型樣的優先順序高於 *Account.jar include 型樣。