【问题标题】:How can I check if my Java project uses Log4j and which version?如何检查我的 Java 项目是否使用 log4j 以及哪个版本?
【发布时间】:2022-01-16 17:45:24
【问题描述】:

由于 log4shell 漏洞,我想搜索并了解我的 Java 项目是直接实现 log4j 还是通过依赖项实现 log4j,以及哪个版本。

我有例如。使用这些依赖管理工具的项目:

  1. Maven 项目
  2. 常春藤项目
  3. 没有依赖管理的旧项目

如何在这些类型的依赖管理工具上做到这一点?

有关漏洞的详细信息(包括缓解步骤):

CVE-2021-44228

Apache Log4j Security Vulnerabilities

【问题讨论】:

  • 检查依赖关系树的依赖关系。检查你的代码。
  • 在开发区顶部查看here的几个地方

标签: java maven log4j ivy


【解决方案1】:

如果你使用maven和linux,你可以运行:

mvn dependency:tree | grep log4j

这将检查您的依赖关系并仅在您将 log4j 作为依赖项时显示结果

如果它是一个传递依赖,并且你想检查它来自哪个依赖,你可以使用:

mvn dependency: tree | grep -B20 log4j

它会在屏幕上显示log4j前面的20行,如果还是看不到主要依赖来自哪里,可以从20增加到50,以此类推,直到找到为止

【讨论】:

    【解决方案2】:

    到目前为止,我对 https://github.com/anchore/syfthttps://github.com/anchore/grype 提供的内容感到满意。这些工具列出了给定 docker 映像或包含代码的目录的所有代码依赖项 - 独立于堆栈!易于设置和快速执行。

    它是独立于 java 的,并且比您针对基于 maven 的解决方案的特定问题更通用。这取决于你是否使用它。

    【讨论】:

    • 这些看起来真的很有趣,不仅可以找到 log4j,而且可以更广泛地使用——作为 CI/CD 管道的一部分集成......
    【解决方案3】:

    您可以在项目中从命令行运行 Maven 依赖树:

    mvn dependency:tree
    

    在输出中搜索log4j。如果你找到它,这可能意味着你的项目要么直接包含log4j,要么另一个依赖包含log4j作为传递依赖。

    【讨论】:

    • 但请记住,将其作为依赖项并不意味着您正在使用它。
    • @TimBiegeleisen,我们如何确定没有在层次结构树中显示 log4j 但在内部使用它的库。例如:mvnrepository.com/artifact/commons-logging/commons-logging/…
    • @Magnum23 如果commons-logging 使用log4j,我的理解是它应该出现在依赖树中。
    • @TimBiegeleisen commons-logging 似乎将log4j 依赖作为可选,所以我认为开发人员必须明确声明它...
    猜你喜欢
    • 1970-01-01
    • 2013-04-07
    • 2010-12-03
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多