本文目录导读:

- 方案一:使用 Composer 官方审计命令(最推荐,简单高效)
- 方案二:集成到 CI/CD 流水线(自动化定期扫描)
- 方案三:专业安全工具(更全面,适合中大型团队)
- 方案四:离线/内网环境扫描
- 方案五:开发阶段实时检查(VSCode 插件)
- 推荐组合策略
针对PHP项目的依赖包安全漏洞扫描,目前主要有以下几种成熟且高效的方案,可以根据项目规模和开发流程选择:
使用 Composer 官方审计命令(最推荐,简单高效)
从 Composer 2.4 版本开始,内置了 audit 命令。
基础扫描
composer audit
- 它会对比
composer.lock中的包版本与 FriendsOfPHP/security-advisories 数据库。 - 如果没有漏洞,返回
0(静默退出);有漏洞会显示详细信息。
格式化输出(适合 CI/CD)
composer audit --format=json
- 输出 JSON 格式结果,方便 Jenkins、GitLab CI 等工具解析并设置构建失败。
仅检查已安装的包
composer audit --no-dev
- 生产环境通常只安装
require中的包,排除require-dev。
自动修复(实验性)
composer audit --fix
- 尝试将受漏洞影响的包更新到包含修复的最低版本(需要
composer.lock可写)。
局限性:只能检查 Composer 官方数据库已有的记录,对私有包或自定义漏洞不生效。
集成到 CI/CD 流水线(自动化定期扫描)
在 GitLab CI、GitHub Actions 或 Jenkins 中配置定期任务(例如每天凌晨):
GitLab CI 示例(.gitlab-ci.yml 片段)
security-audit:
stage: test
script:
- composer install --no-dev --prefer-dist
- composer audit --format=json | tee audit-report.json
artifacts:
paths:
- audit-report.json
when: always
only:
- schedules # 仅定时触发
GitHub Actions 示例
name: Dependency Audit
on:
schedule:
- cron: '0 2 * * *' # 每天 UTC 2 点
push:
branches: [ main ]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- run: composer install --no-dev
- run: composer audit --format=json
优点:
- 自动化无人工干预。
- 可以配合
git tag策略,在发布前强制扫描。
专业安全工具(更全面,适合中大型团队)
当需要覆盖更多漏洞数据库(如 NVD、GitHub Advisory、Snyk)或支持私有组件时,可以使用以下工具:
| 工具 | 特点 | 成本 |
|---|---|---|
| Snyk CLI | 支持 PHP、Java、Node 等;数据库全;可锁定版本 | 免费版有限制(200测试/月),企业版付费 |
| GitHub Dependabot | 自动创建 PR 更新有漏洞的依赖;支持 composer.lock |
免费(GitHub 仓库) |
| GitLab Dependency Scan | GitLab Ultimate 内置的扫描器 | 付费 |
| Syft + Grype | 开源工具链,Syft 生成 SBOM,Grype 扫描漏洞 | 免费 |
Snyk 示例(适合本地快速扫描)
# 安装 npm install -g snyk # 认证(需要注册账号) snyk auth # 扫描当前项目 snyk test # 持续监控(在后台持续监控新漏洞) snyk monitor
Dependabot 配置(./github/dependabot.yml)
version: 2
updates:
- package-ecosystem: "composer"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 10
离线/内网环境扫描
如果项目部署在无法访问外网的环境中,可以使用 本地镜像 的方式:
-
定期同步漏洞数据库:
git clone https://github.com/FriendsOfPHP/security-advisories.git /local/path/advisories
-
本地执行审计(需要 Composer 2.x):
composer audit --format=json --advisories-dir=/local/path/advisories
注意:需要定期拉取更新该仓库(建议每周)。
开发阶段实时检查(VSCode 插件)
推荐安装 PHP Intelephense 或 SonarLint,它们可以:
- 在
composer.json中实时显示已知漏洞的依赖。 - 扫描时自动对比本地数据库。
推荐组合策略
| 场景 | 推荐方案 |
|---|---|
| 个人开发者/小团队 | composer audit 手动执行 + Git hook |
| 中大型团队/公司 | CI 定时扫描(方案二) + Dependabot 自动 PR |
| 内网/高安全需求 | 本地镜像 + 手动定期更新 |
| 生产环境发布前 | composer audit --no-dev --format=json 设置构建门禁 |
Git hook 示例(在 .git/hooks/pre-commit 中阻止提交含漏洞的依赖)
#!/bin/sh
echo "Running composer audit..."
if composer audit --no-dev; then
exit 0
else
echo "Error: Vulnerabilities found. Commit blocked."
exit 1
fi
- 最轻量:
composer audit命令(零额外依赖)。 - 最自动化:CI/CD 定时任务 + 构建阻断。
- 最全面:Snyk / Dependabot / GitLab 企业版。
- 最安全:离线镜像 + 定期同步。
建议首先启用 方案一 的 composer audit 命令,并集成到 方案二 的 CI 流水线中,这是目前成本最低且效果明显的做法,如果涉及敏感数据或合规要求,再考虑升级到 Snyk 等专业方案。