メインコンテンツまでスキップ
バージョン: 最新

Scanner でスキャンする

AMWScan\Scanner は対象をマッピングし、有効な分析を実行して現在のレポートを返します。対象は最初の run() 引数として渡し、run() が再解析しない設定にはセッターを使用します。

コンストラクターとライフサイクル

use AMWScan\Scanner;

$scanner = new Scanner();
$report = $scanner->run(['/srv/app']);
メンバー契約
__construct(?callable $wordpressDatabaseFactory = null)スキャナーを作成します。統合でオプションの WordPress データベーススキャナー依存関係を提供する場合を除き、ファクトリーは省略します。
run(array $args = [])現在のレポートをリセットし、CLI 形式の引数を適用して対象をスキャンし、stdClass を返します。例外を捕捉した場合または実行が中断された場合は false を返します。
isInterrupted()現在または直近の実行が中断されたかどうかを返します。
getLastError()直近の失敗した実行で捕捉したエラーメッセージを返します。
getReport()現在のレポートを stdClass として返します。成功した実行後に使用してください。

オプションの $args 配列にはコマンドラインスキャナーと同じオプション名を指定できます。対象は常に最初の要素として渡してください。run() は位置指定パスに加えて --max-filesize--offset--limit も再適用するため、これらのコントロールは $args で渡します。フラグ名と制約については CLI リファレンス を参照してください。

対象とファイル選択

メソッド入力効果
setPathScan(string $path)存在するファイルまたはディレクトリのパス現在の正規化済みスキャン対象を設定します。run() の位置指定引数が上書きします。
setIgnorePaths(array $paths)パスパターン一致するパスを除外します。
setFilterPaths(array $paths)パスパターン一致するパスにスキャンを限定します。
setExtensions(array $extensions)先頭のドットを含まないファイル拡張子対象となる拡張子リストを置き換えます。
setScanAll(bool $scanAll)真偽値設定された拡張子リスト外のファイルも含めます。
setMaxFilesize(int $size)バイト現在の上限を設定します。スキャン固有の上限には --max-filesize=<size>run() に渡します。
setOffset(int $offset) / setLimit(int $limit)非負整数制御されたバッチ処理のため、マッピングされた部分集合をスキャンします。

リクエストまたはジョブペイロードから受け取ったすべてのパスは、SDK に渡す前に検証してください。Web 向け統合では、許可されたプロジェクトルートに対してパスを解決し、その外の場所を拒否する必要があります。

検出範囲

メソッド効果
enableLiteMode() / disableLiteMode()より軽量なエクスプロイト定義セットを選択します。
setOnlySignaturesMode()シグネチャを有効にし、関数およびエクスプロイトのスキャンを無効にします。
setOnlyExploitsMode()エクスプロイトスキャンのみを有効にします。
setOnlyFunctionsMode()シグネチャと関数のスキャンを有効にし、エクスプロイトスキャンを無効にします。
setFunctions(array $functions)危険な関数の定義を置き換えます。
setFunctionsEncoded(array $functions)指定されたエンコード済み関数を組み込みの危険な関数に追加します。
setExploits(array $exploits)エクスプロイト定義を置き換えます。
enableChecksum() / disableChecksum()プラットフォーム整合性検証を有効または無効にします。
enableDeobfuscateMode() / disableDeobfuscateMode()難読化解除の出力を有効または無効にします。有効にするとレポート書き込みも有効になります。

3 つの setOnly...Mode() は互いの検出範囲を置き換えます。実行ごとに呼び出すのは 1 つまでにしてください。通常のアプリケーションスキャンでは lite モードとレポート専用の動作から開始し、確認済みの検出結果に基づいて調整してください。

出力と実行コントロール

メソッド効果
setSilentMode(bool $enabled = true)対話プロンプトを無効にします。既存のプロンプトがない状態で有効にすると、自動スキップを設定します。
setColors(bool $enabled = true)ターミナルの色を有効または無効にします。
enableLogs() / disableLogs()スキャナーログを有効または無効にします。
setPathLogs(string $path)ログファイルのパスを設定します。
enableReport() / disableReport()レポートファイルの書き込みを有効または無効にします。
setPathReport(string $path)レポートパステンプレートを設定します。
setReportFormat(string $format)htmltxttextloglogsjsonsarifhtm を選択します。無効な値の場合、以前の形式は変更されません。
enableCache() / disableCache()スキャンキャッシュを有効または無効にします。

無人のレポートスキャンには setSilentMode()setAutoSkip() を設定してください。別プロセスがレポートを利用する場合は JSON または SARIF 出力を使用しますが、統合の信頼できる情報源はインメモリのレポート契約として扱ってください。

修復コントロール

メソッドデフォルトの自動アクション
setAutoSkip()検出結果を変更せずに残します。
setAutoClean()一致したコードをファイルから削除します。
setAutoCleanLine()一致した行を削除します。
setAutoQuarantine()ファイルを隔離先に移動します。
setAutoDelete()ファイルを削除します。
setAutoWhitelist()検出結果をホワイトリストに追加します。
enableBackups() / setPathBackups(string $path)スキャナーが変更するファイルのバックアップを保持します。
setPathQuarantine(string $path)隔離ディレクトリを設定します。
setPathWhitelist(string $path)ホワイトリスト JSON ファイルを設定します。
危険

setAutoClean()setAutoCleanLine()setAutoQuarantine()setAutoDelete() はファイルを変更します。本番環境で自動修復を使用する前に、バックアップを有効にし、スキャン対象ツリーの外部に書き込み、プロジェクトのコピーでワークフローをテストしてください。

範囲を限定したバッチスキャン

use AMWScan\Scanner;

$scanner = new Scanner();
$report = $scanner
->setIgnorePaths(['/srv/releases/current/var/cache'])
->setExtensions(['php', 'phtml', 'htaccess'])
->enableLiteMode()
->setSilentMode()
->setAutoSkip()
->run([
'/srv/releases/current',
'--max-filesize=2097152',
]);

if ($report === false) {
throw new RuntimeException($scanner->getLastError() ?: 'Scan failed.');
}

すべてのバッチで $report->coverage を確認してください。成功した戻り値はスキャンが完了したことだけを示します。検出されたすべてのファイルが対象だった、または読み取り可能だったことを意味するものではありません。