Composer 2.5+ 支持内置 audit 命令扫描依赖安全漏洞,可集成至 CI/CD、pre-commit 钩子及生成归档报告,支持按严重级别中断、忽略特定 CVE 和 JSON 格式输出。

如果您希望在 Composer 项目中主动识别已知的安全漏洞,可通过内置的 composer audit 命令执行依赖项安全扫描。以下是将该审计能力集成至开发与交付流程的具体操作方式:
一、启用并运行基础安全审计
Composer 2.5+ 版本原生支持 audit 命令,无需额外安装插件,其原理是比对 composer.lock 中记录的包版本与 Packagist 官方维护的 CVE 漏洞数据库。
1、确保当前项目已锁定依赖,即存在有效的 composer.lock 文件。
2、在项目根目录下执行命令:composer audit。
3、若发现漏洞,命令将输出含 CVE 编号、受影响包名、版本范围及严重等级的结构化报告。
二、配置 CI/CD 流程自动触发审计
为防止含高危漏洞的依赖被合并或部署,可在持续集成阶段强制执行审计,并在检测到中高风险问题时中断构建。该机制依赖于退出码控制逻辑。
1、在 GitHub Actions 的 .github/workflows/ci.yml 中添加步骤:
2、插入如下 YAML 片段(置于 composer install 后):
3、使用 --no-dev 参数排除开发依赖以聚焦生产环境风险:
4、添加 --format=json 输出便于解析,配合脚本判断是否存在 severity: critical 或 high 条目。
三、设置审计失败阈值并阻断发布
默认情况下 composer audit 在发现任意漏洞时返回非零退出码,但可结合参数精细化控制中断条件,避免低风险问题干扰交付节奏。
1、仅当存在 critical 或 high 级别漏洞时失败:执行 composer audit --severity=critical,high。
2、忽略特定已知漏洞(需提供 CVE ID):使用 --ignore=CVE-2023-12345 参数临时豁免。
3、将上述命令写入 Makefile 的 security-check 目标,供团队统一调用。
四、集成至 pre-commit 钩子实现本地防护
通过 Git 预提交钩子,在代码提交前自动运行审计,可提前拦截引入不安全依赖的变更,降低后期修复成本。
1、安装 husky 或直接编辑 .git/hooks/pre-commit 文件。
2、在钩子脚本中加入判断逻辑:若 composer audit --no-dev 返回非零值,则终止提交并打印提示。
3、确保钩子文件具备可执行权限:chmod +x .git/hooks/pre-commit。
4、向团队分发该钩子模板,并纳入项目文档的“本地开发规范”章节。
五、生成可归档的审计报告文件
为满足合规性审查或内部审计要求,需将某次审计结果持久化为机器可读且人工可查的静态文件。
1、执行命令:composer audit --format=json > security-audit-$(date +%Y%m%d-%H%M%S).json。
2、将生成的 JSON 文件提交至 docs/security-reports/ 目录。
3、在 composer.json 的 scripts 区块中定义快捷脚本:
4、后续只需运行 composer run-script generate-security-report 即可完成归档。










