Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

Qodana 2026.2:更强安全性、更佳覆盖率、更少配置

#qodana#代码覆盖率#安全#静态分析#代码质量

[LOADING...]

Qodana 2026.2 让开发团队更轻松地在整个开发工作流程中针对代码质量、安全性和合规性问题采取行动。此版本引入了更清晰的拉取请求代码覆盖率洞察,直接在 IDE 中高亮未覆盖的新代码行,并自动检测常见项目位置中的覆盖率报告,从而减少了开始使用所需的配置。

该版本还扩展了 Qodana 的安全功能,新增了检查项、支持自定义安全规则、后量子密码学检查,并通过 SABER 公开提供 SAST 基准。Laravel 检查现已默认启用,而新的许可证审计质量门禁可帮助团队防止带有禁止或未知许可证的新依赖项进入管道。让我们深入了解细节。

尝试 Qodana

更好的代码覆盖率用户体验

IDE 中增量分析的代码覆盖率

从 Qodana 2026.2 开始,拉取请求分析可以显示哪些更改或新增的行已被测试覆盖、哪些未被覆盖,同时显示新增代码的总覆盖率,即新鲜覆盖率。

分析后,开发者可以在 IDE 中打开报告并浏览拉取请求中更改的文件。他们可以通过工具窗口中的统计数据查看哪些文件缺乏覆盖率,同时 IDE 会高亮新行以揭示覆盖率缺口。开发者可以利用这些信息为缺乏覆盖的功能编写有针对性的测试,从而提高软件的可靠性。

[LOADING...]

开箱即用的代码覆盖率报告

在 Qodana 中显示代码覆盖率结果现在需要更少的配置步骤。你不再需要将所有报告复制到 .qodana/code-coverage 目录,这使得你可以简化构建配置。

Qodana 2026.2 自动检测项目中的覆盖率报告:

  • Qodana for JVM 和 Qodana for Android:支持 Jacoco 和 Kover 插件的默认路径(Maven 和 Gradle 均适用)
  • Qodana for JS:支持默认位置 coverage/lcov.info,以及一些常见的社区位置,如 reportstest-coverage 目录
  • Qodana for PHP:支持 clover.xmlcoverage.xml 文件,位于常见社区位置,例如项目根目录、build/logsreportscoverage
  • Qodana for Python:支持 coverage.xml 文件,位于常见位置,例如项目根目录、coverage-reportsreports
  • Qodana for Go:支持根目录中的 coverage.outcover.out 文件,以及其他常用目录如 coveragereports
  • Qodana for .NET:支持项目根目录或其他常用目录(如 coverageTestResults)中的 coverage.coberturacoverage.info 文件

要生成代码覆盖率报告,请设置其中一个支持的覆盖率工具,你可在任何运行中查看统计数据。要禁用此行为,请选择性地将报告复制到 .qodana/code-coverage 目录,或使用 qodana.yaml 文件中的新 codeCoverageLocations 参数指定自定义位置。有关如何指定自定义目录的示例,请参阅文档。要禁用覆盖率报告,请在配置中禁用相应的检查

查看文档

新的安全检查

更广泛的 SAST 和多文件污点分析

Qodana 2026.2 扩展了 Qodana for .NET 检查工具中可用的安全分析,帮助团队检测 C#、JavaScript 和 TypeScript 代码中更广泛的漏洞。新的检查在推荐配置文件中默认启用,并作为标准 Qodana 发现项出现在现有的 IDE、CI/CD 和报告工作流程中。

扩展的检查集结合了两种分析形式。模式匹配规则识别单个代码位置内的不安全编码实践,而污点分析则跟踪不受信任的数据在应用程序中的移动,包括跨多个文件。这使得 Qodana 能够检测到 SQL 注入、命令注入、跨站脚本(XSS)和路径遍历等漏洞。

团队还可以通过自己的安全规则扩展此覆盖范围。Qodana for .NET 现在支持以 OpenGrep 格式编写的自定义和第三方规则。将这些规则放置在项目根目录下的 .qodana/opengrep 目录中,Qodana 将使其作为 Qodana 检查可用。

预定义规则在 opengrep-sast-rules 仓库中公开提供。在底层,模式匹配使用 JetBrains 对 OpenGrep 的开源分支,而数据流跟踪由 Qodana 自己的污点分析引擎处理。这使得团队能够使用 OpenGrep 规则格式和生态系统,同时保留 Qodana 的多文件分析和开发者工作流程。未来版本将扩展对更多 Qodana 检查工具和语言(Kotlin/Java)的支持。

以下示例展示了 Qodana 如何检测 WebGoat.NET 项目中的经典 SQL 注入漏洞。污点跟踪遵循从 Request["productNumber"] 到另一个文件中的 SQL 查询的不受信任输入。

[LOADING...]

污点跟踪从 Request["productNumber"] 中的不受信任用户输入开始 [LOADING...] 不受信任的输入进入另一个文件中的 SQL 查询

SABER -- 静态分析基准评估运行器

为了使这些检查的性能更易于评估,我们引入了 SABER,即静态分析基准评估运行器。SABER 针对公开可用的安全基准运行 Qodana,并将其发现与已知的预期结果进行比较。

通过 SABER 实现透明的 SAST 基准测试

当前的基准套件包括:

  • 针对 C# 和 JavaScript 的 CodeQL 基准,基于 CodeQL .expected 文件构建
  • WebGoat.NET,使用 Sonar 公开提供的真实数据
  • Qodana 后量子密码学演示项目

基准配置、单次运行和汇总结果在 SABER TeamCity 实例 上公开提供。

已启用访客访问,任何人都可以检查结果并跟踪 Qodana 的 SAST 能力随时间的发展。可通过此链接访问:https://saber.teamcity.com/(已启用访客访问,任何人都可以使用“以访客身份登录”选项打开)。我们致力于展示 SAST 相关能力,并使用行业标准基准不断改进它们。例如,这是当前可用基准的汇总报告: [LOADING...] Qodana 2026.2 中的 SABER

项目“CodeQL C#”和“CodeQL JS”使用 jetbrains-qodana/codeql-benchmark 项目,该项目基于 CodeQL.expected 文件构建。WebGoat.NET 项目是一个著名的易受攻击的 C# 项目(我们的分支在此:jetbrains-qodana/WebGoat.NET),并使用公开可用的 ground-truth.json 作为预期结果。PQC demo 项目是一个测试项目,展示了识别代码中后量子密码学问题的能力。

后量子密码学 (PQC) 检查

如果你听说过量子计算,你可能知道它将来会轻易破解许多广泛使用的公钥密码算法(如 RSA 和 ECC)。尽管量子计算尚未广泛普及,但由于“先收割,后解密”的方法,你现在就应该做好准备。未来的攻击者可能已经收集并存储你的加密数据,以便以后解密。

Qodana for JVM 现在包含检查,帮助开发者识别受影响的代码,并引导他们转向后量子密码替代方案,从而降低未来安全风险,支持逐步、可管理的迁移,帮助组织为量子时代的安全风险做好准备。

我们的 PQC 检查根据 NIST 建议 实现,并分为几个优先级级别(称为 PqcMinLevel1、PqcMinLevel2,直至 PqcMinLevel5)。要启用这些检查,请激活代表基于 NIST 的后量子就绪级别的相应组之一:

  • Level 1 – 标记前量子传统密码算法。这揭示了最关键的漏洞。
  • Level 2 – 标记基准后量子算法。
  • Level 3 – 标记标准强度后量子算法。
  • Level 4 – 标记高强度后量子算法。
  • Level 5 – 标记除提供最大安全性的算法之外的所有算法。

每个级别都包含所有之前的级别,因此 level 5 包含 level 1-4 的检查。

我们还准备了一个演示项目(PQC demo),展示了 PQC 的当前能力。这些检查由 OpenGrep 和污点分析(如上一节所述)支持,它们还支持 Java 和 Kotlin 的出色模式匹配和多文件污点分析,如下例所示。

[LOADING...]

在字符串常量中发现不合规的加密协议 [LOADING...] 该字符串通过另一个文件传播 [LOADING...] 并最终在真实用法中落地,正确检测到了问题

Laravel 检查默认启用

Qodana for PHP 现在包含 Laravel 代码检查。这减少了 PHP 代码中的误报,并针对 Laravel 特定的代码问题(例如直接向受保护属性赋值)进行分析。

[LOADING...] Laravel 检查

许可证审计的质量门禁

Qodana 2026.2 增加了对许可证审计质量门禁的支持,提供了两个新选项:

  • failOnProhibited – 如果任何依赖项使用了根据你的许可证规则被禁止的许可证,则运行失败。
  • failOnUnknown – 如果任何依赖项的许可证无法检测或分类,则运行失败。

例如,在 qodana.yaml 中,failureConditions 部分现在可以包含一个 dependencyLicenses 块:

failureConditions:
  dependencyLicenses:
    failOnProhibited: true
    failOnUnknown: true

Qodana 直接根据收集到的依赖项许可证评估质量门禁,与许可证审计问题是否作为检查结果存在无关。只需要启用 CheckDependencyLicenses 检查。

许可证审计质量门禁也适用于增量分析,并且仅在新违规时失败。

下一步做什么:

如果你已经在使用最新版本,可以立即开始使用 Qodana 2026.2 中的改进。如果没有,请更新到 2026.2。

有关设置详情和特定功能指南,请前往文档。如果你想在自己的环境中查看 Qodana 的功能,请在你的项目上尝试,并在 Qodana 博客 上探索最新更新。

如果你想从我们的销售团队了解更多信息,或者在从可比商业解决方案切换到 Qodana 时获得 20% 的折扣,请申请演示。

请求 Qodana 演示