PHP项目供应链安全审查指南
核心审查领域
依赖管理
# 检查Composer依赖 composer audit composer show --tree | grep -E "dev-master|dev-develop|alpha|beta"
典型风险点:
- 未锁定版本:
composer.json使用、范围导致自动升级 - 废弃包:使用截至审查日超过2年未更新的包
- 已知漏洞:通过
security-advisories数据库比对
安全审查清单
1 直接依赖检查
{
"require": {
"laravel/framework": "^9.0",
"vendor/package": "1.2.3"
}
}
- 检查
composer.lock是否在版本控制中 - 验证所有包来源(官方Packagist vs 第三方仓库)
- 审查
require-dev依赖在生产环境中的使用
2 代码质量审计
# PHPStan静态分析 vendor/bin/phpstan analyse --level=max # 敏感信息扫描 grep -rn "password\|secret\|api_key\|token" --include="*.php" --exclude="test/"
3 构建流程安全
- [ ] CI/CD管道是否验证签名(Codecov、GitHub Actions等)
- [ ] 是否使用
composer install --no-dev --optimize-autoloader - [ ] 是否缓存
composer.lock的hash值
常见威胁模型
| 攻击向量 | 案例 | 检测方法 |
|---|---|---|
| 依赖混淆 | 恶意包名与官方相似 | 核对vendor/目录签名 |
| 后门注入 | 通过PR注入eval()函数 | 代码审查+SAST工具 |
| 版本劫持 | 维护者账号被入侵 | 检查commit签名 |
| 供应链篡改 | 篡改Packagist源 | 使用--prefer-dist并验证hash |
自动化工具集成
# .github/workflows/audit.yml
on: [push]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: shivammathur/setup-php@v2
with:
php-version: 8.1
- run: composer install --no-dev
- run: composer audit --format=json | jq .
- uses: docker://aquasec/trivy:latest
with:
args: filesystem --scanners vuln .
合规要求(参考OWASP)
- SBOM生成:
composer licenses --format=json > sbom.json - 许可检查:禁止GPL v3(传播性)和WTFPL(无担保)
- 出口管制:检查包是否来自被制裁国家(伊朗、朝鲜等)
应急响应预案
# 发现漏洞时的紧急操作 composer require vendor/package:1.2.4 --no-update # 锁定已知安全版本 composer update --lock # 刷新锁定文件 git add composer.lock && git commit -m "[SECURITY] Fix CVE-2023-XXXX"
最终审查报告模板
## 依赖审计报告 ### 高风险项 - [ ] 包A (v1.0.0) 存在远程代码执行漏洞 (CVE-2023-XXXX) - [ ] 包B 使用 md5() 加密敏感数据 ### 中风险 - [ ] 8个包超过18个月未更新 - [ ] 未启用 PHP 8.1 的 `--repeat-pass` 安全检查 ### 改进建议 1. 实施 `pre-commit` 钩子自动运行 `composer audit` 2. 集成 `roave/security-advisories` 作为开发依赖 3. 每月执行 `composer update --prefer-lowest` 测试兼容性
持续监控方案
- Dependabot/ Renovate:自动创建安全更新PR
- Snyk.io:实时监控依赖漏洞
- PhpStorm X-Ray:IDE插件检查IDE的包依赖
特殊场景处理
私有包管理
composer config repositories.local path /path/to/package composer require your/package @dev # 明确标记为开发阶段
遗留系统(PHP 7.x)
{
"require": {
"php": "^7.4|^8.0",
"ext-mcrypt": "*" // 已废弃扩展
}
}
- 必须使用
--ignore-platform-reqs检查兼容性 - 建议迁移到
ext-sodium
最终审查应生成包含CVE编号、CVSS评分及修复步骤的详细报告,建议使用 composer audit --format=json | jq '.advisories | keys' 快速获取关键漏洞列表。

版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播