Разрешение внешней сущности WebLogic XML: Есть ли другой способ, кроме использования реестра XML? - PullRequest
4 голосов
/ 31 июля 2009

У нас есть приложение, которое использует 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, а не «там»?

1 Ответ

2 голосов
/ 26 сентября 2012

Быстрый вопрос. Вы пытаетесь сделать это по соображениям безопасности? хотели бы предотвратить любую атаку XXE?

Если это так, вы можете реализовать свой собственный EntityResolver и управлять тем, как синтаксический анализатор выполняет поиск локально или удаленно.

Примеры можно найти здесь https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=61702260

в противном случае вам нужно установить свойства config XMLInputFactory, чтобы получить желаемое поведение. в частности, javax.xml.stream.isSupportingExternalEntities и javax.xml.stream.isValidating зависит только от того, считаете ли вы, что вам нужна проверка.

http://docs.oracle.com/javaee/5/api/javax/xml/stream/XMLInputFactory.html

Также загляните в парсер StaX, если это имеет смысл для вашего использования.

...