【问题标题】:ESAPI - Getting NoClassDefFoundError (LoggerFactory) with banned dependencyESAPI - 获得具有禁止依赖的 NoClassDefFoundError (LoggerFactory)
【发布时间】:2015-12-15 16:58:54
【问题描述】:

我正在使用ESAPI 对字符串值进行编码以解决跨站点脚本问题,如下所示(代码 sn-p)。

String encodedString = ESAPI.encoder().encodeForHTML(value);

异常跟踪

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)
    at org.owasp.esapi.ESAPI.encoder(ESAPI.java:99)
<bold>Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/spi/LoggerFactory</bold>
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:74)
    at org.owasp.esapi.ESAPI.logFactory(ESAPI.java:137)
    at org.owasp.esapi.ESAPI.getLogger(ESAPI.java:154)
    at org.owasp.esapi.reference.DefaultEncoder.<init>(DefaultEncoder.java:75)
    at org.owasp.esapi.reference.DefaultEncoder.getInstance(DefaultEncoder.java:59)
    ... 71 more
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.spi.LoggerFactory
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

Maven 存储库 pom.xml

<dependency>
    <groupId>org.owasp.esapi</groupId>
    <artifactId>esapi</artifactId>
    <version>${org.owasp.esapi.version}</version>
    <exclusions>
        <exclusion>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
        </exclusion>
        <exclusion>
            <groupId>xercesImpl</groupId>
            <artifactId>xercesImpl</artifactId>
        </exclusion>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
        <exclusion>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
        </exclusion>
        <exclusion>
            <groupId>commons-digester</groupId>
            <artifactId>commons-digester</artifactId>
        </exclusion>
        <exclusion>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.owasp.antisamy</groupId>
            <artifactId>antisamy</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

如果我不排除 log4j 那么它会抛出依赖收敛错误,因为 log4j 是在 maven 禁止依赖中声明的,如下所示

<executions>
    <execution>
        <id>enforce</id>
        <configuration>
            <rules>
                <requireJavaVersion>
                    <version>${java.version}</version>
                </requireJavaVersion>
                <requireMavenVersion>
                    <version>3.0</version>
                </requireMavenVersion>
                <DependencyConvergence />
                <bannedDependencies>
                    <excludes>
                        <!-- This should not exist as it will force SLF4J calls to be 
                            delegated to log4j -->
                        <exclude>org.slf4j:slf4j-log4j12</exclude>
                        <!-- This should not exist as it will force SLF4J calls to be 
                            delegated to jul -->
                        <exclude>org.slf4j:slf4j-jdk14</exclude>
                        <!-- Ensure only the slf4j binding for logback is on the classpath -->
                        <exclude>log4j:log4j</exclude>
                        <!-- As recommended from the slf4j guide, exclude commons-logging -->
                        <exclude>commons-logging:commons-logging</exclude>
                    </excludes>                                     
                </bannedDependencies>
            </rules>
        </configuration>
        <goals>
            <goal>enforce</goal>
        </goals>
    </execution>
</executions>

在这方面的帮助将不胜感激。如果您需要更多详细信息,请告诉我。提前致谢!

【问题讨论】:

    标签: espai java maven dependencies esapi


    【解决方案1】:

    我升级到最新版本2.2.1.1,我需要在ESAPI.properties 中添加两个额外的属性(除了@Carlo 指出的那个):

    ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory
    Logger.UserInfo=false
    Logger.ClientInfo=false
    

    【讨论】:

    • 它有所帮助,虽然在我的例子中我们使用的是 Log4j2,我不得不使用从 org.owasp.esapi.reference.Log4JLogFactory 移到这个包的 org.owasp.esapi.logging.log4j.Log4JLogFactory
    【解决方案2】:

    ESAPI 不支持 SLF4J,即使反过来支持 log4j。 ESAPI 的日志记录选择是 log4j 或 java.util.logging,通过 ESAPI.properties 中的 ESAPI.logger 属性控制。如果您决定使用 log4j(即 ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory),那么您需要 log4j.jar 以及类路径中的 log4j.xml 或 log4j.properties,具体取决于哪个版本您正在使用的 log4j。或者,您可以通过在 ESAPI.properties 文件中设置 ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory 来使用 java.util.logging。

    我看到你似乎在为富国银行做这件事。如果您还有其他问题,请在 Teamworks 中查找“Kevin W. Wall”并向我发送电子邮件,因为我是那里的安全代码审查团队的一员,也是 ESAPI 的项目负责人,所以如果有更多的上下文,我可能能够提出其他可能性。

    -凯文

    【讨论】:

    • 感谢凯文现在的工作。我改变了 ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory
    • 这不再是真的。请参阅@Carlo 的回答。
    【解决方案3】:

    只是更新:已添加对 SLF4J 的支持,因此如果您使用 ESAPI 版本 2.2.0.0,您可以通过将 ESAPI.Logger 属性设置为值 org.owasp.esapi.logging.slf4j.Slf4JLogFactory 来使用它

    【讨论】:

      【解决方案4】:

      如果您的 SpringBoot 项目没有 ESAPI.properties,则在 src/main/resource 文件夹中添加名称为 ESAPI.properties 的文件并添加以下行。

      ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory
      ESAPI.LogEncodingRequired=false
      

      还要检查 maven 引用的库并检查 esapi 的版本,它应该是 esapi-2.2.0.0 或 esapi-2.2.1.1(基本上你应该使用这些 esapi 版本)

      注意:您可以根据运行应用程序时遇到的错误添加更多属性。

      【讨论】:

        猜你喜欢
        • 2013-04-25
        • 1970-01-01
        • 2012-05-21
        • 1970-01-01
        • 2015-11-30
        • 2016-11-01
        • 2020-04-19
        相关资源
        最近更新 更多