跳到主要内容
版本:最新版本

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

AI 检测结果审查

AI 审查默认禁用。启用后,检测完成时,AMWScan 会请求所选提供商给出咨询性质的 malwarefalse_positiveuncertain 判定。每个请求都包含匹配的规则以及检测行周围长度受限的代码摘录。它绝不会自动更改检测结果状态或修改文件。

选项用途默认值
--ai-provider=<provider>使用 openaianthropicgeminiclaude-code-clicodex-clicopilot-cliopencode-clidisabled
--ai-model=<model>覆盖提供商或已安装 CLI 的模型提供商默认值
--ai-context-lines=<number>包含检测行上方和下方各 0 至 20 行5
--ai-max-findings=<number>将每次扫描的审查尝试次数限制为 1 至 100 次20
--ai-timeout=<seconds>将每次提供商请求限制为 5 至 300 秒30
--ai-executable=<path>覆盖已安装 CLI 提供商使用的可执行文件提供商命令

API 密钥从 OPENAI_API_KEYANTHROPIC_API_KEYGEMINI_API_KEY 读取。AMWSCAN_AI_API_KEY 会覆盖提供商专用变量。密钥不能作为命令选项传入,因为命令参数可能出现在 shell 历史记录和进程列表中。

GEMINI_API_KEY=your-key php scanner /var/www/example \
--report-only --report-format=json --ai-provider=gemini

php scanner /var/www/example --report-only \
--ai-provider=claude-code-cli --ai-model=claude-sonnet-4-5

直接 API 的默认模型为 gpt-5.6-lunaclaude-haiku-4-5gemini-3.8-flash。已安装的 CLI 集成会在隔离目录中调用 claudecodexcopilotopencode,且不经过 shell。它们通常会将源代码摘录发送到远程模型服务;已安装并不代表在本地进行推理。如果命令以其他名称或路径安装,请使用 --ai-executable

报告和输出

选项用途默认值
--report, -r禁用交互式操作并写出报告关闭
--report-format=<format>选择 htmltxtjsonsarifhtml
--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/pathftps://host/path URL 作为扫描路径传入即可。PHP 需要 FTP 扩展,FTPS 需要 ftp_ssl_connect

不要将凭据放入 URL 中。使用 --ftp-userAMWSCAN_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。保留报告作为构建产物,保护它们中包含的本地路径或代码摘录,并在将扫描器作为发布门禁前,先在你自己的持续集成任务中测试其退出行为。