【问题标题】:Migrating log4j from 1 to 2 causing ESAPI errors将 log4j 从 1 迁移到 2 导致 ESAPI 错误
【发布时间】:2016-06-28 21:15:28
【问题描述】:

我已将 log4j 从 1.X 升级到 2.3。日志记录工作正常。但是,我正在使用 ESAPI,现在它给了我错误。

这是我的 ESAPI 导入语句:

import org.owasp.esapi.ESAPI;

这就是我使用 ESAPI 的方式:

ESAPI.encoder().encodeForHTML(somevalue)

我收到的异常是:

exception org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException Encoder class (org.owasp.esapi.reference.DefaultEncoder) CTOR threw exception.
org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException Encoder class (org.owasp.esapi.reference.DefaultEncoder) CTOR threw exception.
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:129) ~[esapi-2.1.0.jar:2.1.0]
    at org.owasp.esapi.ESAPI.encoder(ESAPI.java:99) ~[esapi-2.1.0.jar:2.1.0]

我正在使用 Eclipse,我正在使用 log4j-api-2.3.jar 和 log4j-core-2.3.jar

【问题讨论】:

  • 如果取出log4j,还会报esapi错误吗?
  • @rajah9 我很难检查它,因为它嵌套在应用程序的深处。删除 log4j 会导致大量错误。不过,我可以告诉你,使用 log4j1.2.9 效果很好。
  • 仅供参考:。最新版本的 ESAPI 是 2.1.0.1
  • 我尝试使用 ESAPI 2.1.0.1 并收到以下错误:org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException SecurityConfiguration class (org.owasp.esapi.reference. DefaultSecurityConfiguration) CTOR 抛出异常。

标签: java log4j2 esapi


【解决方案1】:

我将 log4j 1 迁移到 2 并修复了这个错误,只是更改了 ESAPI.properties 文件中的下一行: ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory

【讨论】:

    【解决方案2】:

    你有 log4j-1.2-api-2.3.jar 吗?我怀疑它没有找到它正在使用的 Log4j 1.2 API 的任何绑定。

    另一种方法是使用 Log4j 2 的 LogFactory 和 Logger 实现以供 ESAPI 使用,但我怀疑这比您可能想做的工作要多。

    【讨论】:

    • 我正在使用 log4j-1.2-api-2.3.jar 和 log4j-api-2.3.jar 和 log4j-core-2.3.jar。我已将所有这些添加到我的项目中。
    • 好的 - 这应该是你所需要的。如果是我,我会下载 ESAPI 源代码并通过在 DefaultEncoder 类中放置断点来逐步执行 ObjFactory.make,这样您就可以在构造对象时看到失败的原因。这总是有点棘手,因为您必须在获得异常的实际类中放置一个断点。 DefaultEncoder 只是受害者。
    • 您能否指出“Log4j 2 的 LogFactory 和 Logger 实现”的方向和示例?我不确定你的意思。
    • 如果您转到github.com/ESAPI/esapi-java-legacy/tree/develop/src/main/java/…,您将看到 3 个实现 ESAPI LogFactory 和 Logger 接口的类。您可以通过将 ESAPI 配置为使用您的实现来创建将 ESAPI 绑定到 Log4j 2 的版本。
    【解决方案3】:

    通过使用 Log4j-2 到 SLF4J 适配器,并配置 ESAPI 以使用 SLF4J,我能够让我的项目正常工作。

    https://github.com/ESAPI/esapi-java-legacy/wiki/Using-ESAPI-with-SLF4J

    另外,我需要添加 SLF4J 所需的 ESAPI 属性。

    https://github.com/OWASP/owasp-java-encoder/blob/main/esapi/src/test/resources/.esapi/ESAPI.properties

    如果您希望消除 log4j 1.x 以使其不显示为漏洞,您可能还希望在构建中明确排除 log4j 1.x(取决于您的构建方法)。

    【讨论】:

    • ESAPI Java Legacy wiki 链接已更新为引用 log4j-core-2.16.0 而不是易受攻击的 log4j-core-2.13.3。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2019-07-21
    • 2019-02-05
    • 2011-07-13
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多