Composer怎么检查安全漏洞 audit命令检测依赖风险【安全】

9次阅读

composer audit 是 Composer 2.5+ 内置的安全审计命令,用于扫描 composer.lock 中包的已知漏洞,依赖 FriendsOfphp/security-advisories 数据库,支持按严重程度、jsON 输出、跳过 dev 依赖等选项,但不覆盖 CVE 延迟收录、私有包及逻辑漏洞。

Composer怎么检查安全漏洞 audit命令检测依赖风险【安全】

Composer 自带的 audit 命令能快速发现已知漏洞,但默认不启用,且只查 PHP 官方安全公告(PHP Security Advisories database),不覆盖所有第三方漏洞库。

composer audit 命令怎么用

从 Composer 2.5 开始内置该命令,无需额外插件:

  • 基础扫描:composer audit —— 检查当前 composer.lock 中所有已安装包
  • 仅报告高危漏洞:composer audit --severity=high(可选值:lowmediumhighcritical
  • 输出 json 格式供 CI 解析:composer audit --format=json
  • 跳过 dev 依赖(生产环境更关注):composer audit --no-dev

注意:它不自动升级包,只是“告诉你哪里有问题”。

audit 查不到 CVE 或私有漏洞的常见原因

它依赖的是 FriendsOfPHP/security-advisories 数据库,所以:

  • 新发布的 CVE 可能尚未被收录,通常有数小时到数天延迟
  • 未被该数据库收录的项目(如某些小众 fork、内部私有包)不会出现在结果中
  • 不检查你代码里手写的 sql、硬编码密钥等逻辑漏洞 —— 这是 SAST 工具的事
  • 如果 composer.lock 不存在或损坏,audit 会直接报错:Could not find lock file

audit 和第三方工具(如 SensioLabs Security Checker)的区别

旧版常用 sensiolabs/security-checker,但它已于 2023 年下线;现在官方推荐 composer audit,但能力有边界:

  • composer audit 是本地执行、离线可运行(只要数据库已缓存),不上传依赖信息
  • 它不支持自定义漏洞源,也不能关联你的 gitHub/gitlab 仓库做持续监控
  • 若需更深度检测(如供应链投毒、许可证风险、版本漂移),得配合 phpstanroave/security-advisories(阻止已知漏洞版本安装)或商业 SCA 工具

例如,加这行到 composer.json 可在 install/update 时就拦截高危版本:
"require": {"roave/security-advisories": "dev-latest"}

CI/CD 中集成 audit 的实用建议

别只在本地跑,把它放进构建流程才真正起作用:

  • github Actions 示例片段中,记得先 composer install --no-interaction --no-progresscomposer audit --no-dev --severity=critical
  • GitLab CI 中,若用 composer:2 镜像,确认版本 ≥ 2.5(可用 composer --version 验证)
  • 审计失败时不要静默忽略 —— 加 --fail-on-Error 让构建直接退出
  • 定期手动运行 composer audit --all(检查所有已知包,不限于当前 lock)可辅助评估技术债

真正容易被忽略的是:audit 结果依赖 lock 文件的完整性。如果你用 composer update 跳过 lock、或手动编辑过它,audit 可能漏检 —— 别绕过锁文件机制。

text=ZqhQzanResources