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
) の属性および子エレメントは次のように使用されます。
Target
エレメントのoutputs-only
属性は、ディレクトリーをスキャンし、CLI を実行してビルド出力ファイル (.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 はAppSrv01
プロファイル内のデプロイされているすべての.ear
ファイルを検出します。<Target outputs-only="false" path="C:\WebSphere\AppServer85">
と指定すると、CLI はすべてのプロファイル内のデプロイされているすべての.ear
ファイルを検出します。- 以下に示す、オプションの
Target
サブエレメントも指定できます。CustomBuildInfo
エレメントを使用して、属性を設定できます。テンプレートのこの部分を使用して、
ターゲット言語に応じたビルド情報を指定できます。一部の言語では、2 つ以上の属性を設定できます。例えば、ターゲット言語に応じて<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 コンパイラーのパスを指定するには、
jsp_compiler
属性を使用します。例: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
属性を使用してアセンブリー参照を追加します。複数の reference はセミコロンで区切ります。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 の場合、次の属性を設定できます。
注: これらの属性によって設定される値は、サブターゲットに引き継がれます。例えば、WAR サブターゲットと JAR サブターゲットを含む EAR ファイルがターゲットの場合、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
パターンが優先されます。
ターゲットの包含と除外の動作
ターゲット・タイプ | 振る舞い | 例(X) |
---|---|---|
.dll | ターゲットが .dll ファイルの場合、これらのファイルにはターゲットを含めることができないため、ターゲットの包含または除外がスキャンに影響することはありません。 | |
.jar | ターゲットが .jar ファイルの場合、.jar から .class ファイルを除外できます。 |
*MyClass.class |
.war | ターゲットが .war ファイルの場合、.class、.jsp、および JavaScript ファイル・タイプおよび .jar ファイルを WEB-INF/lib から除外できます。 注: デフォルトでは、.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 が依存関係を見つけるために使用されます。
- JSP コンパイルには、Apache Tomcat バージョン 7 アプリケーション (CLI に含まれているもの) ではなく C:\Tomcat コンパイラーが使用されます。
- CLI を使用してスキャンを実行すると、 *Account.jar で終わるすべてのファイルと同様に ShoppingCart.war ファイルが包含されます。ファイルの thirdPartyJars/ 内のものはすべて除外され、ファイル名に test という文字列が含まれるファイルもすべて除外されます。競合が存在する場合は、
exclude
パターンが優先されます。例えば、EAR ファイルに testCustomerAccount.jar ファイルが入っている場合、このファイルは除外されます。これは、testexclude
パターンが *Account.jarinclude
パターンよりも優先されるためです。