CLI 命令参考
运行 php scanner --help 可以查看你安装版本支持的选项。
php scanner [path] [options]
path 可以接受一个文件、目录、通配符,或者一个 FTP 或 FTPS URL。若省略,则扫描器使用当前目录。
检测
| 选项 | 用途 |
|---|---|
--lite, -l | 在保留较广检测范围的同时,减少常见误报 |
--only-signatures, -s | 仅扫描恶意软件签名 |
--only-exploits, -e | 仅扫描漏洞利用模式 |
--only-functions, -f | 仅扫描危险的 PHP 函数 |
--exploits=<names> | 按逗号分隔,包含选定的漏洞利用定义 |
--ignore-exploits=<names> | 按逗号分隔,排除选定的漏洞利用定义 |
--functions=<names> | 按逗号分隔,扫描选定的 PHP 函数 |
--scan-all, --all | 检查所有扩展名的文件 |
--scan-archives | 在安全限制内检查 ZIP 条目 |
--scan-wordpress-db | 对本地 WordPress 数据库运行只读检查 |
--max-filesize=<size> | 跳过大于给定大小的文件 |
范围和进度
| 选项 | 用途 |
|---|---|
--ignore-paths=<patterns> | 排除逗号分隔的路径或通配符 |
--filter-paths=<patterns> | 仅包含匹配的路径或通配符 |
--offset=<number> | 从候选文件列表中的指定位置开始 |
--limit=<number> | 限制映射文件的数量 |
--checkpoint=<path> | 以私有 JSON 文件保存可恢复的扫描进度 |
--resume | 在文件和设置仍匹配时继续执行检查点 |
--disable-cache, --no-cache | 忽略缓存的扫描结果 |
php scanner /var/www/example --lite --report \
--ignore-paths="*/cache/*,*/logs/*" \
--max-filesize=5MB
报告和输出
| 选项 | 用途 | 默认值 |
|---|---|---|
--report, -r | 禁用交互式操作并写出报告 | 关闭 |
--report-format=<format> | 选择 html、txt、json 或 sarif | html |
--path-report=<path> | 设置报告文件路径 | ./scanner-report.html |
--log=<path> | 写出扫描日志 | 关闭 |
--path-logs=<path> | 设置扫描器日志路径 | ./scanner.log |
--silent | 隐藏终端输出和提示 | CLI 中默认关闭 |
--disable-report, --no-report | 禁止生成报告 | CLI 中默认关闭 |
--disable-colors, --no-colors, --no-color | 移除 ANSI 颜色 | 关闭 |
--debug | 显示所有 PHP 错误和警告 | 关闭 |
文本报告包含扫描总数、校验计数、严重程度总数、感染文件元数据,以及匹配的发现详情。JSON 和 SARIF 更适合自动化处理。
文件操作
仅在你持有当前备份且已有经过测试的恢复方案时,才使用自动清理或删除。对每个新项目,先从 --report 开始。
| 选项 | 用途 |
|---|---|
--backup, -b | 备份扫描器更改的每个文件 |
--auto-clean | 无需确认即可移除匹配代码 |
--auto-clean-line | 无需确认即可移除匹配行 |
--auto-delete | 无需确认即可删除检测到的文件 |
--auto-quarantine | 无需确认即可将检测到的文件移动到隔离区 |
--auto-skip | 保持每个发现不变 |
--auto-whitelist | 将每个发现加入白名单 |
--auto-prompt=<action> | 对每个发现应用一个提示响应 |
--whitelist-only-path | 仅按路径匹配白名单条目,而不按行匹配 |
将备份、隔离区、报告和白名单数据存放在公共文档根目录之外:
| 选项 | 用途 |
|---|---|
--path-backups=<path> | 设置备份目录 |
--path-quarantine=<path> | 设置隔离目录 |
--path-whitelist=<path> | 设置白名单 JSON 文件 |
--findings-store=<path> | 设置规范化发现生命周期 JSON 文件 |
--path-deobfuscate=<path> | 设置去混淆文件目录 |
完整性和定义
| 选项 | 用途 |
|---|---|
--disable-checksum, --no-checksum, --no-verify | 跳过平台和软件包校验和验证 |
--path-definitions=<path> | 设置私有 Maltrail 定义缓存 |
--disable-definitions-update | 使用最后一次已验证的 Maltrail 缓存,而不发起更新请求 |
--defs | 打印漏洞利用和函数定义 |
--defs-exploits | 打印漏洞利用定义 |
--defs-functions | 打印危险函数定义 |
--defs-functions-encoded | 打印编码后的函数定义 |
内置签名可离线使用。平台校验和和 Maltrail 定义更新在首次扫描时可能需要对外部 HTTPS 连接。
实用选项
| 选项 | 用途 |
|---|---|
--ftp-user=<username> | 设置 FTP 用户名,或者使用 AMWSCAN_FTP_USER |
--update, -u | 更新独立扫描器文件 |
--version, -v | 打印已安装版本 |
--help, -h, -? | 打印命令帮助 |
FTP 源
将一个 ftp://host/path 或 ftps://host/path URL 作为扫描路径传入即可。PHP 需要 FTP 扩展,FTPS 需要 ftp_ssl_connect。
不要将凭据放入 URL 中。使用 --ftp-user 或 AMWSCAN_FTP_USER 设置用户名,使用 AMWSCAN_FTP_PASSWORD 设置密码。优先使用 FTPS,因为 FTP 会在未加密的情况下发送凭据和文件内容。
AMWSCAN_FTP_USER=scanner \
AMWSCAN_FTP_PASSWORD=secret \
php scanner ftps://files.example.com/public_html --report
FTP 扫描使用临时本地镜像,强制使用报告模式,并在完成后删除镜像。一次扫描仅接受一个 FTP 源,限制为 10,000 个文件、每个文件 64 MiB,以及总计 512 MiB。FTP 源不能使用 --scan-wordpress-db。
平台校验和验证
校验和验证支持 WordPress、部分 WordPress 插件、Drupal、Joomla、Magento Open Source 和公共 Composer 软件包。扫描器只会跳过与可信发布字节完全匹配的文件,并会扫描已修改、已生成和未知文件。
首次检查某个平台版本时,可能需要对外部 HTTPS 发起请求。成功生成的清单会保留在本地缓存中。若扫描必须完全不发起校验和请求,可使用 --disable-checksum。
覆盖范围和恢复
报告会区分已发现、合格、已扫描、已缓存、已验证和已跳过的文件。跳过原因包括路径过滤器、扩展名、文件大小、不可读文件和归档限制。
--checkpoint=<private-path> 会在每个候选文件之后保存进度。--resume 仅在候选列表和扫描设置仍匹配时才继续。
ZIP 扫描需要 ext-zip。扫描器会限制条目路径、符号链接、条目数、文件大小、展开大小、压缩比和嵌套深度。报告会将超出这些限制的内容标记为覆盖范围不完整。
WordPress 数据库扫描
--scan-wordpress-db 会在本地发现的 WordPress 安装中运行可选的只读阶段。它检查数据库触发器、盘点主站管理员、标记需要审查的多个管理员,并报告孤立文章。它不会修改数据库内容。
此选项需要 ext-mysqli。AMWScan 会直接从 wp-config.php 读取数据库设置,而不执行该文件。动态或含糊不清的设置会产生覆盖范围不完整的结果。
退出与自动化指导
若另一程序会处理详细发现,请使用 JSON。若工具支持标准格式,则使用 SARIF。保留报告作为构建产物,保护它们中包含的本地路径或代码摘录,并在将扫描器作为发布门禁前,先在你自己的持续集成任务中测试其退出行为。