Risoluzione entità esterna XML WebLogic: esiste un altro modo oltre all'utilizzo del registro XML?
-
06-07-2019 - |
Domanda
Abbiamo un'applicazione che utilizza SiteMesh e quando WebLogic tenta di analizzare i file TLD, vede la specifica DOCTYPE, contenente il riferimento al DTD TLD, in " http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd " ;.
Il server non può avviare connessioni in uscita a Internet, quindi non può recuperare il DTD, il che provoca il fallimento della distribuzione dell'applicazione.
Comprendo che questo problema può essere risolto impostando un registro XML nella console di WebLogic e specificando un file locale da restituire quando si tenta di risolvere, ad esempio " http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd " ;.
Esiste un altro modo per impedire al server di uscire in rete per risolvere il riferimento di entità esterna? Impacchettando il DTD con l'applicazione e in qualche modo informando il server di cercare quel DTD lì dentro piuttosto che "quotato là fuori"?
Soluzione
Domanda rapida, stai cercando di farlo per motivi di sicurezza? vuoi prevenire qualsiasi tipo di attacco XXE?
In tal caso è possibile implementare il proprio EntityResolver e gestire il modo in cui il parser esegue qualsiasi ricerca locale o remota.
Esempi sono disponibili qui https: //www.securecoding .cert.org / confluenza / pagine / viewpage.action? pageId = 61702260
altrimenti è necessario impostare le proprietà di configurazione di XMLInputFactory per ottenere il comportamento desiderato. in particolare javax.xml.stream.isSupportingExternalEntities e javax.xml.stream.isLa convalida dipende solo se pensi di aver bisogno della convalida.
http://docs.oracle.com/ JavaEE / 5 / api / javax / xml / stream / XMLInputFactory.html
Guarda anche nel parser StaX se ha senso per il tuo uso.