跳到主要内容
版本:v0.20

使用 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)选择 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。成功返回仅确认扫描完成;它不表示每个发现的文件都有资格被扫描或可读取。