composer audit 确实执行安全检查,但仅限于已安装依赖在 friendsofphp/security-advisories 中的已知漏洞;它不扫描源码、不强制阻断,且需满足 composer ≥2.5.0、experimental.audit 启用、存在有效 composer.lock 三前提才真正生效。

composer audit 命令是否真在跑安全检查
光执行 composer audit 不代表它正在查漏洞——它默认只检查已安装依赖的已知 CVE,且不强制阻断。如果项目没声明最低安全等级,或配置被覆盖,命令会静默跳过高危项。
验证是否启用真实审计逻辑,必须确认三点:
-
composer config --list --global输出中包含audit相关配置项(如audit.block-insecure),否则走的是默认宽松策略 - 运行
composer audit --no-dev -v,日志里必须出现类似Found 2 security vulnerabilities或Scanning packages from lock file,而不是直接返回空或仅提示 “No vulnerabilities found” - 手动触发一个已知问题包(例如用
composer require guzzlehttp/guzzle:6.5.0,该版本含 CVE-2021-3114),再跑composer audit,看是否报出对应 CVE ID;不报则说明审计源未加载或被禁用
composer.json 里的 audit 配置有没有被读取
很多人把 "audit" 块写进 composer.json 的 config 字段,但 Composer 2.5+ 要求它必须在顶层 config 下,且不能嵌套在 extra 或 scripts 里。错一层,整个配置就失效。
正确结构示例(必须是这样):
{"config": {"audit": {"block-insecure": true, "ignore": ["CVE-2023-1234"]}}}
验证方式:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config config.audit(不加-g),输出应为完整 JSON 对象,不是null或报错 - 删掉
composer.lock后执行composer install -v,观察日志是否含Auditing dependencies行 - 若仍不生效,检查是否用了
COMPOSER_NO_AUDIT=1环境变量——它会全局禁用审计,连--ignore-severity都无效
audit 报告里的漏洞来源是否可信
composer audit 默认只对接 Packagist 官方安全公告(https://security.sensiolabs.org 已停用,现用 https://github.com/composer/security-advisories)。国内镜像如阿里云、腾讯云**不提供安全元数据同步服务**,换源后若没显式指定审计源,就会漏掉大量非 Packagist 官方收录的漏洞。
确保审计数据链完整:
- 运行
composer config --list | grep -i security,确认没有security-advisories类配置被意外 unset - 不要依赖镜像站“自动同步安全信息”的宣传——目前所有中文镜像均不代理安全 advisory 数据,必须走官方通道
- CI/CD 中建议加一行
curl -sS https://getcomposer.org/installer | php -- --install-dir=/tmp --filename=composer,避免旧版 Composer(audit 命令
为什么 audit 显示 “No vulnerabilities” 却仍有风险
这是最常被忽略的一点:composer audit 只检查 composer.lock 里记录的**已解析版本**,不会扫描你代码里 require_once 或 include 的裸文件,也不会检测 dev-only 包(除非加 --with-dependencies)。
真正要覆盖全部风险面,得组合验证:
- 加
--with-dependencies查间接依赖:composer audit --with-dependencies - 用
composer check-platform-reqs排查因 PHP 版本/扩展缺失导致的运行时降级漏洞(比如本该用 sodium 加密却 fallback 到弱 MD5) - 对私有包或 fork 仓库,
audit完全不覆盖——必须靠composer validate --strict+ 手动git diff比对变更
安全配置不是设完就一劳永逸的事。audit 生效的前提是 lock 文件干净、Composer 版本 ≥2.7、且没被环境变量或项目级配置静默绕过。任何一环断开,报告都只是假阳性安慰。










