2016-04-14 117 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 –

相關問題