必须加--with-dev,因为composer audit默认只扫描require中的运行时依赖,忽略require-dev中的开发依赖(如phpunit),而后者同样存在cve漏洞,漏扫会导致sonarqube报告失真;加该参数后可全面覆盖并输出合规json供插件解析。

composer audit 是唯一能直接对接 SonarQube 的 Composer 原生命令,其他方式(如 composer show --outdated、composer update)不输出 CVE 信息,也无法被 SonarQube 解析。
为什么 composer audit 必须加 --with-dev
默认情况下,composer audit 只检查 require 中的运行时依赖,完全忽略 require-dev。但像 phpunit、phpstan、doctrine/migrations 这类开发依赖,同样存在 CVE(例如 CVE-2023-34987 影响 phpunit 9.5.x)。漏掉它们会导致 SonarQube 报告严重失真。
- 必须显式加
--with-dev参数:运行composer audit --format=json --with-dev > dependency-audit.json - 若项目使用
platform配置(如强制 PHP 版本),audit仍会基于 lock 文件中解析出的实际安装版本判断,不受 platform 干扰 - 注意:该命令不触发任何安装或更新行为,纯只读扫描
SonarQube 插件加载 JSON 报告的三个硬性条件
sonar-dependency-check-plugin 不是官方插件,但它是目前唯一稳定支持 composer audit JSON 格式的社区方案。它对路径、格式、字段名极其敏感。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 插件 JAR 文件必须放入
$SONARQUBE_HOME/extensions/plugins/,重启服务后才能在 Settings → Dependency-Check 中看到配置项 -
sonar.dependencyCheck.jsonReportPath值必须是相对路径(如./dependency-audit.json),不能写成/home/ci/project/dependency-audit.json - CI 流水线中执行
sonar-scanner时,需同步传参:-Dsonar.dependencyCheck.jsonReportPath=dependency-audit.json,否则插件读不到文件
常见报错:“Dependency-Check JSON report does not exists” 怎么快速定位
这个错误几乎全是路径问题,不是插件没装好,也不是 JSON 格式错——而是 SonarQube 扫描器根本没找到文件。
- 先确认
dependency-audit.json真的存在于sonar-scanner当前工作目录下(不是项目根目录,而是sonar-scanner启动时所在的目录) - GitHub Actions 默认工作目录是
/home/runner/work/repo-name/repo-name,不是${{ github.workspace }};建议显式用working-directory: .或在 job 步骤里加run: pwd && ls -l dependency-audit.json - JSON 文件必须包含
.advisories字段,且该字段为数组;空报告(无漏洞)也会有"advisories": [],但若字段缺失或类型错误,插件直接静默失败
sonar-dependency-check-plugin 提供的只是“带样式的 JSON 导入”,不等同于企业版的高级 SAST+SCA 联动分析。它不会追踪依赖调用链,也不会标记“该 CVE 是否被实际代码路径触发”。想获得这种深度,必须升级到 SonarQube Enterprise 或使用 Horusec 这类专做依赖扫描的工具作补充。










