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) | html、txt、text、log、logs、json、sarif、htm を選択します。無効な値の場合、以前の形式は変更されません。 |
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 を確認してください。成功した戻り値はスキャンが完了したことだけを示します。検出されたすべてのファイルが対象だった、または読み取り可能だったことを意味するものではありません。