使用 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) | 字节 | 设置当前限制。请向 run() 传递 --max-filesize=<size> 以设置特定扫描限制。 |
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() | 启用或禁用反混淆输出。启用它也会启用报告写入。 |
三个 setOnly...Mode() 方法会相互替换检测范围。每次运行最多调用其中一个方法一次。对于常规应用程序扫描,先使用轻量模式和仅报告行为,然后根据已审查的发现进行调整。
输出和执行控制
| 方法 | 效果 |
|---|---|
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。成功返回仅确认扫描完成;它不表示每个发现的文件都有资格被扫描或可读取。