CodeQL 扫描 JAR 文件

CodeQL Scanning JAR Files

我刚刚开始使用 CodeQL,并且已经成功扫描了 Python 个项目。现在,我开始扫描 Java 个项目,我很难扫描预编译的项目。

根据我收集到的信息,CodeQL CLI 似乎包括一个用于 Java 代码的自动构建器,并且会为我构建项目。我正在尝试扫描已经从 Maven 中央存储库编译的项目。

问题:

  1. 是否可以使用 CodeQL 扫描包含在 JAR 文件中的已编译 Java 源代码(即字节码,class 文件)?
  2. 如果是这样,我如何调用这些属性来从 CLI 扫描 JAR 文件?

感谢您的任何见解!

根据我的阅读,它似乎不适用于已编译的 类。您将需要 src 代码,无论它是作为(Jar,然后您需要在处理之前解压缩)还是 Github 项目存在。

通常在 运行 期间,您会提供构建项目的方法,例如 --language=java --command='mvn clean install -DskipTests' <-- 这需要源代码。

正如另一个答案中提到的,对于 Java,CodeQL 在编译期间观察结果并从中创建数据库。因此不可能从包含已编译 类 的 JAR 构建数据库。但是可以在项目中使用编译的类(例如以Maven依赖的形式,或者JDK用法),CodeQL会记录这些类被使用的信息,但是它不了解这些 类 的作用。这意味着它们将无法使用数据流或污点流,除非 CodeQL 对其进行显式建模,请参阅 list of supported frameworks.

但是,由于您的计划是 运行 从 Maven Central 查询项目,因此 obtain the databases from lgtm.com, or to directly use the Query Console on lgtm.com, see also the documentation 最容易。对于大多数项目,lgtm.com 能够自行构建项目。

lgtm.com 归 Semmle 所有,Semmle 最初创建了 CodeQL,是 acquired by GitHub.