Résolution d'entité XML WebLogic externe: existe-t-il un autre moyen que d'utiliser le registre XML?
-
06-07-2019 - |
Question
Nous avons une application qui utilise SiteMesh et lorsque WebLogic tente d'analyser les fichiers TLD, il voit la spécification DOCTYPE, contenant la référence à la DTD TLD, à l'emplacement suivant: " http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd ".
Le serveur ne peut pas établir de connexions sortantes vers Internet et ne peut donc pas récupérer la DTD, ce qui entraîne l'échec du déploiement de l'application.
Je comprends que ce problème peut être résolu en configurant un registre XML dans la console WebLogic et en spécifiant un fichier local à renvoyer lors de la tentative de résolution, par exemple & a; http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd ".
Existe-t-il un autre moyen d'empêcher le serveur de se rendre sur le réseau pour résoudre la référence à une entité externe? En empaquetant la DTD avec l’application et en informant le serveur de rechercher cette DTD plutôt que "dehors"?
La solution
Question rapide essayez-vous de le faire pour des raisons de sécurité? voulez-vous empêcher toute sorte d'attaque XXE?
Si tel est le cas, vous pouvez implémenter votre propre EntityResolver et gérer la manière dont l'analyseur effectue une recherche locale ou distante.
Des exemples sont disponibles ici https: //www.securecoding .cert.org / confluence / pages / viewpage.action? pageId = 61702260
sinon, vous devez définir les propriétés de configuration de XMLInputFactory pour obtenir le comportement souhaité. En particulier, javax.xml.stream.isSupportingExternalEntities et javax.xml.stream.isValidating dépendent simplement du fait que vous pensez avoir besoin de validation.
http://docs.oracle.com/ javaee / 5 / api / javax / xml / stream / XMLInputFactory.html
Recherchez également l'analyseur StaX si cela vous semble judicieux.