PHP项目供应链安全审查

wen PHP项目 4

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' 快速获取关键漏洞列表。

PHP项目供应链安全审查

抱歉,评论功能暂时关闭!