Resolución de entidad externa XML de WebLogic: ¿Hay otra forma además de usar el Registro XML?
-
06-07-2019 - |
Pregunta
Tenemos una aplicación que usa SiteMesh, y cuando WebLogic intenta analizar los archivos TLD, ve la especificación DOCTYPE, que contiene la referencia al TLD DTD, en " http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd " ;.
El servidor no puede iniciar conexiones salientes a Internet y, por lo tanto, no puede recuperar la DTD, lo que hace que falle la implementación de la aplicación.
Entiendo que este problema se puede resolver configurando un Registro XML en la consola de WebLogic y especificando un archivo local para devolver al intentar resolver, por ejemplo " http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd " ;.
¿Hay alguna otra forma de evitar que el servidor salga a la red para resolver la referencia de entidad externa? Al empaquetar el DTD con la aplicación e informar de alguna manera al servidor para que busque ese DTD allí en lugar de "afuera" " ;?
Solución
Pregunta rápida ¿Estás tratando de hacer esto por razones de seguridad? desea evitar cualquier tipo de ataque XXE?
Si es así, podría implementar su propio EntityResolver y manejar cómo el analizador realiza cualquier búsqueda local o remota.
Puede encontrar ejemplos aquí https: //www.securecoding .cert.org / confluence / pages / viewpage.action? pageId = 61702260
de lo contrario, debe establecer las propiedades de configuración de XMLInputFactory para obtener el comportamiento que desea. particularmente javax.xml.stream.isSupportingExternalEntities y javax.xml.stream.is La validación solo depende si cree que necesita validación.
http://docs.oracle.com/ javaee / 5 / api / javax / xml / stream / XMLInputFactory.html
También busque en el analizador StaX si tiene sentido para su uso.