Разрешение внешней сущности WebLogic XML: Есть ли другой способ, кроме использования реестра XML?
-
06-07-2019 - |
Вопрос
У нас есть приложение, которое использует SiteMesh, и когда WebLogic пытается проанализировать файлы TLD, он видит спецификацию DOCTYPE, содержащую ссылку на DTD TLD, по адресу http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd ".
Сервер не может инициировать исходящие подключения к Интернету и поэтому не может получить DTD, что приводит к сбою развертывания приложения.
Я понимаю, что эту проблему можно решить, настроив реестр XML в консоли WebLogic и указав локальный файл, возвращаемый при попытке разрешения, например " http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd ".
Есть ли другой способ предотвратить выход сервера в сеть для разрешения ссылки на внешнюю сущность? Путем упаковки DTD с приложением и каким-то образом информирования сервера о необходимости поиска этого DTD, а не «там»?
Решение
Быстрый вопрос. Вы пытаетесь сделать это по соображениям безопасности? хотели бы предотвратить любую атаку XXE?
Если это так, вы можете реализовать свой собственный EntityResolver и управлять тем, как анализатор выполняет поиск локально или удаленно. Р>
Примеры можно найти здесь https: //www.securecoding .cert.org / слияния / страницы / viewpage.action? PageId = 61702260
в противном случае вам нужно установить свойства config XMLInputFactory, чтобы получить желаемое поведение. в частности, javax.xml.stream.isSupportingExternalEntities и javax.xml.stream.isValidating зависит только от того, считаете ли вы, что вам нужна проверка. Р>
http://docs.oracle.com/ JavaEE / 5 / API / javax / XML / поток / XMLInputFactory.html р>
Также загляните в парсер StaX, если это имеет смысл для вашего использования.