ESAPI выдает org.owasp.esapi.errors.ConfigurationException при попытке записать предупреждение

Мы добавили фильтр в наше весеннее веб-приложение, которое проверяет все входящие запросы на наличие всего, что может вызвать 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 также находится в пути к классам.


person mongiesama    schedule 14.04.2016    source источник
comment
Возможно, ESAPI.properties находится в нескольких местах. Можете ли вы удалить свойство, которое, как вы знаете, работает, и убедиться, что оно проверяет, принимает ли ваше изменение библиотека ESAPI.   -  person randominstanceOfLivingThing    schedule 15.04.2016
comment
Можете ли вы запустить приложение на своем локальном компьютере?   -  person avgvstvs    schedule 15.04.2016


Ответы (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);
person mongiesama    schedule 18.04.2016

Следуя комментарию Суреша ... С этой целью посмотрите, где вы захватили стандартный вывод, и найдите «Попытка загрузить 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 оттуда, где вы ожидали его загрузки.

person Kevin W. Wall    schedule 16.04.2016
comment
И если у вас есть вопросы о том, как находится файл ESAPI.properties, вы можете найти некоторые подробности здесь: stackoverflow.com/questions/17639314/ - person Kevin W. Wall; 16.04.2016