You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式调用Composer 2.4的composer audit功能?

可行!直接复用Composer内部组件实现编程式审计

你可以直接复用Composer的PHP代码组件,无需调用命令行,就能实现针对指定composer.json和composer.lock文件的审计,返回结构化的结果对象。

实现步骤

1. 引入Composer核心依赖

首先在你的项目中安装Composer的核心包(作为开发依赖即可):

composer require composer/composer:^2.4 --dev

2. 编写自定义审计类

创建一个ComposerAuditor类,封装Composer内部的审计逻辑:

<?php

use Composer\Audit\Auditor;
use Composer\Audit\AuditResult;
use Composer\Factory;
use Composer\Json\JsonFile;
use Composer\Package\Locker;
use Composer\Repository\CompositeRepository;
use Composer\Repository\PlatformRepository;
use Composer\Repository\RepositoryFactory;

class ComposerAuditor
{
    public function audit(string $composerJsonPath, string $composerLockPath): AuditResult
    {
        // 加载指定的composer.json和composer.lock文件
        $composerJson = new JsonFile($composerJsonPath);
        $composerLock = new JsonFile($composerLockPath);
        
        // 初始化Composer配置
        $factory = new Factory();
        $config = $factory->createConfig();
        
        // 构建锁文件处理器,读取锁文件数据
        $locker = new Locker($composerJson, $composerLock, $config);
        $locker->setLockData($composerLock->read());
        
        // 获取锁文件中记录的所有依赖包仓库
        $localRepo = $locker->getLockedRepository(true);
        
        // 组合审计所需的仓库集合(平台环境+本地依赖+远程Composer仓库)
        $repos = new CompositeRepository([
            new PlatformRepository(),
            $localRepo,
            RepositoryFactory::createRepository('composer', [], $config),
        ]);
        
        // 初始化审计器并执行审计
        $auditor = new Auditor($repos, $config);
        return $auditor->audit();
    }
}

3. 使用审计类获取结构化结果

调用自定义类,传入文件路径即可获取审计结果,结果是AuditResult对象,包含所有结构化的漏洞信息:

<?php

require __DIR__ . '/vendor/autoload.php';

$auditor = new ComposerAuditor();
// 替换为你的composer.json和composer.lock路径
$result = $auditor->audit(__DIR__ . '/composer.json', __DIR__ . '/composer.lock');

// 遍历所有漏洞详情
$vulnerabilities = $result->getVulnerabilities();
foreach ($vulnerabilities as $vuln) {
    echo "包名:{$vuln->getPackageName()}\n";
    echo "受影响版本:{$vuln->getAffectedVersions()}\n";
    echo "漏洞描述:{$vuln->getDescription()}\n";
    echo "修复版本:" . implode(', ', $vuln->getFixedVersions()) . "\n";
    echo "-------------------------\n";
}

// 获取审计统计数据
echo "总漏洞数:{$result->getTotalVulnerabilities()}\n";
echo "高危漏洞数:{$result->getHighCount()}\n";
echo "严重漏洞数:{$result->getCriticalCount()}\n";

关键说明

  • 这种方式完全复用Composer官方的审计逻辑,和命令行composer audit的结果100%一致,避免了解析命令行输出的繁琐和不可靠性。
  • AuditResult对象提供了丰富的方法来提取结构化数据,比如获取不同风险等级的漏洞数量、单个漏洞的详细信息等。
  • 确保安装的composer/composer版本不低于2.4,对应composer audit功能的最低支持版本。

内容的提问来源于stack exchange,提问作者Kevin Pfeifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:10:44