antisamy-esapi.xml не найден при попытке использовать OWASP ESAPI

Я пытался оценить библиотеку OWASP ESAPI, но у меня возникли проблемы с ее правильной инициализацией. Я настроил папку ресурсов для ESAPI.properties и validation.properties, и они загружаются из пути к классам без проблем. Однако файл antisamy-esapi.xml не загружается из пути к классам, и я обнаружил ошибку 2010 года, в которой упоминается об этом. Я получаю следующие ошибки:

Попытка загрузить antisamy-esapi.xml в качестве файла ресурсов через файловый ввод-вывод. Не найден в каталоге org.owasp.esapi.resources или файл не читается: C:\Users\mydir\resin-pro-4.0.27\antisamy-esapi.xml Не найден в SystemResource Directory/resourceDirectory: .esapi\antisamy -esapi.xml Не найден в каталоге «user.home» (C:\Users\mydir): C:\Users\mydir\esapi\antisamy-esapi.xml

Я развертываю приложение, используя эту библиотеку, для смолы. Я попытался вручную поместить файл xml во все вышеперечисленные места, и единственный, который, наконец, сработал, был мой домашний каталог, который не очень хорошо подходит для производственного развертывания.

Я также следовал рекомендации, найденной в другом месте, в которой говорится, что необходимо установить свойство -Dorg.owasp.esapi.resources. Это тоже не сработало, но, что более интересно, ошибка не изменилась, что заставляет меня думать, что настройка по какой-то причине не была подобрана.

Любые указатели на то, где этот файл должен быть расположен в моем проекте, чтобы он правильно загружался после развертывания в контейнере?

Заранее спасибо.

Обновлять:

Таким образом, при копании кода выясняется, что существует специальная функция для загрузки ESAPI.properties, поэтому этот файл можно загрузить из стандартного каталога ресурсов (или любого другого каталога src), который развернут в контейнере. Однако функция загрузки для antisamy-esapi.xml просто проверяет определенный каталог в user.home, настроенный пользовательский каталог или результат ClassLoader.getSystemResource(). Не уверен, почему эти подпрограммы разделены. После нескольких часов возни с этим я потерял терпение и скопировал DefaultSecurityConfiguration.java и исправил метод getResourceFile(), чтобы использовать тот же код поиска, что и loadConfigurationFromClasspath(). Затем я вызываю ESAPI.override() с этим классом, и теперь он работает правильно.


person Peter Friend    schedule 17.08.2012    source источник
comment
В документации по esapi содержится предупреждение НИКОГДА не использовать метод ESAPI.override() в производственном коде. Это следует учитывать будущим искателям вопросов.   -  person avgvstvs    schedule 17.10.2014
comment
Свойство java должно было сработать, смогли ли вы через журнал проверить, подхватил ли его веб-сервер? Если вы работаете локально, вы можете увидеть, было ли передано свойство, изучив серверный процесс с помощью такого инструмента, как procexp.   -  person avgvstvs    schedule 17.10.2014
comment
Вот соответствующая справка.   -  person avgvstvs    schedule 12.02.2015


Ответы (1)


Мне удалось заставить его работать, добавив следующую строку для ресурсов esapi:

System.setProperty("org.owasp.esapi.resources", "src/main/resources");

DefaultSecurityConfiguration.java

По крайней мере, теперь я могу использовать instance.getValidSafeHTML

Однако это не будет работать при развертывании на веб-сервере. Я предполагаю, что патч необходим для загрузки antisamy-esapi.xml для загрузки из пути к классу.

person rush    schedule 19.02.2014