java - 尝试记录警告时 ESAPI 抛出 org.owasp.esapi.errors.ConfigurationException

标签 java spring esapi

我们在 Spring Web 应用程序中添加了一个过滤器,用于检查所有传入请求是否存在可能导致 XSS 漏洞的内容。但是,当它尝试写入日志时,我们得到以下堆栈跟踪:

com.blah.blah.web.controllers.ExceptionLoggingController - ERROR: Exception: code=500,uri=/post.html,servlet=dispatch,class=org.owasp.esapi.errors.ConfigurationException,from=1.2.3.4,message=Request processing failed; nested exception is org.owasp.esapi.errors.ConfigurationException: java.lang.IllegalArgumentException: Classname cannot be null or empty. HTTPUtilities type name cannot be null or empty.
org.owasp.esapi.errors.ConfigurationException: java.lang.IllegalArgumentException: Classname cannot be null or empty. HTTPUtilities type name cannot be null or empty.
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:105)
    at org.owasp.esapi.ESAPI.httpUtilities(ESAPI.java:121)
    at org.owasp.esapi.ESAPI.currentRequest(ESAPI.java:70)
    at org.owasp.esapi.reference.JavaLogFactory$JavaLogger.log(JavaLogFactory.java:308)
    at org.owasp.esapi.reference.JavaLogFactory$JavaLogger.warning(JavaLogFactory.java:242)
    at org.owasp.esapi.reference.DefaultEncoder.canonicalize(DefaultEncoder.java:181)
    at org.owasp.esapi.reference.DefaultEncoder.canonicalize(DefaultEncoder.java:120)
    at com.blah.blah.web.MyFilter.removeXSS(MyFilter.java:26)

我在类路径上有 ESAPI.properties,它似乎可以正常工作,并且确实配置了“丢失”的类:

ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities

DefaultHTTPUtilities 也在类路径上。

最佳答案

事实证明,我还导入了一个名为 opensaml 的库(作为其他依赖项的依赖项)。该库有自己的 SecurityConfiguration 实现,这是 ESAPI 用于加载配置的接口(interface)。由于某种原因,opensaml 实现了几乎所有只返回 null 或 0 的方法:

package org.opensaml;
/**
 * Minimal implementation of OWASP ESAPI {@link SecurityConfiguration}, providing the support used within OpenSAML.
 */
public class ESAPISecurityConfig implements SecurityConfiguration {
    /** Constructor. */
    public ESAPISecurityConfig() {
    }
    // snip...
    /** {@inheritDoc} */
    public String getHTTPUtilitiesImplementation() {
        return null;
    }
    // snip....
}

在一个名为 DefaultBootstrap 的类中,它在我的应用程序启动期间的某个位置执行,这会覆盖 ESAPI 的默认实现:

protected static void initializeESAPI() {
    ESAPI.initialize("org.opensaml.ESAPISecurityConfig");
}

我无法摆脱 opensaml 库,因此我必须更改代码,以便在调用 ESAPI 之前将其重写回默认实现:

        ESAPI.initialize("org.owasp.esapi.reference.DefaultSecurityConfiguration");
        value = ESAPI.encoder().canonicalize(value);

关于java - 尝试记录警告时 ESAPI 抛出 org.owasp.esapi.errors.ConfigurationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36635745/

相关文章:

java - 如何在 Twitter4J 中设置消费者 key / secret 对?

java - 尝试构建一个java字节码的反编译器,但不知道在什么情况下 "stack map frame"不会碰巧是 "FRAMSAME"

java - 保存 List<Integer> 的状态

java - ApiOriginFilter.java是如何生成的

java - XSS 过滤器以删除所有脚本

java - 如何在esapi中生成Master Key和MasterSalt

java - Swagger ui - 查询参数

java - 带有 jdk 11 : Error creating bean with name 'entityManagerFactory' 的 Spring Boot 2.1.1

java - JobRunr 与 Spring Boot - ConverterNotFound 异常

java - Web 项目下 ESAPI.properties 的正确位置