2016-04-14 1232 views
1

我们在我们的spring webapp中添加了一个筛选器,它检查所有传入的请求是否有可能导致XSS漏洞的任何事情。然而,当它试图写入日志,我们可以得到以下堆栈跟踪:ESAPI在尝试记录警告时抛出org.owasp.esapi.errors.ConfigurationException

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) 

我在classpath ESAPI.properties,这似乎是工作,不然,那确实有配置的“失踪”类:

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

DefaultHTTPUtilities也位于类路径中。

+0

也许ESAPI.properties位于多个位置。您是否可以删除您知道正在运行的属性,并查看它是否检查您的更改是否由ESAPI库提取。 – randominstanceOfLivingThing

+0

你可以在本地机器上运行应用程序吗? – avgvstvs

回答

2

事实证明,我还导入了一个名为opensaml的库(作为其他一些依赖项的依赖项)。这个库有自己的SecurityConfiguration实现,这是ESAPI用来加载配置的接口。出于某种原因,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); 
0

继续关注Suresh的评论...为此,请查看您捕获stdout的位置,然后查找“试图加载ESAPI.properties”并遵循该步骤。它应该看起来像这样:

Attempting to load ESAPI.properties via file I/O. 
Attempting to load ESAPI.properties as resource file via file I/O. 
Not found in 'org.owasp.esapi.resources' directory or file not readable: /home/kww/Code/GitHub/kwwall/esapi-java-legacy/ESAPI.properties 
Found in SystemResource Directory/resourceDirectory: /home/kww/Code/GitHub/kwwall/esapi-java-legacy/target/test-classes/esapi/ESAPI.properties 
Loaded 'ESAPI.properties' properties file 

而且它们确保它从您预期将要加载的位置加载ESAPI.properties。

+0

如果您对ESAPI.properties文件的位置有疑问,可以在这里找到一些关于此的详细信息:https://stackoverflow.com/questions/17639314/location-of-owasp-esapi-file-in-maven - 项目的web/17644433#17644433 –

相关问题