2009-07-30 7 views
4

Wir haben eine Anwendung, die SiteMesh verwendet, und wenn WebLogic versucht, die TLD-Dateien zu analysieren, sieht es die DOCTYPE-Spezifikation mit dem Verweis auf die TLD-DTD unter "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd".Externe WebLogic XML-Entitätsauflösung: Gibt es einen anderen Weg als die Verwendung der XML-Registrierung?

Der Server kann keine ausgehenden Verbindungen mit dem Internet initiieren und kann daher die DTD nicht abrufen, wodurch die Bereitstellung der Anwendung fehlschlägt.

Ich verstehe, dass dieses Problem gelöst werden kann, indem Sie eine XML-Registrierung in der WebLogic-Konsole einrichten und eine lokale Datei angeben, die zurückgegeben werden soll, beispielsweise "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd".

Gibt es eine andere Möglichkeit zu verhindern, dass der Server an das "Netz" geht, um die externe Entitätsreferenz aufzulösen? Indem man die DTD mit der Anwendung packt und irgendwie den Server informiert, um dort nach der DTD zu suchen, anstatt "da draußen"?

Antwort

2

Schnelle Frage versuchen Sie dies aus Sicherheitsgründen zu tun? magst du jede Art von XXE-Angriff verhindern?

Wenn dies der Fall ist, können Sie Ihren eigenen EntityResolver implementieren und damit umgehen, wie der Parser lokal oder remote sucht.

Beispiele finden Sie hier https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=61702260

sonst müssen gefunden Sie die Konfigurationseigenschaften des XMLInputFactory, um die von Ihnen gewünschten Verhalten zu erhalten. Vor allem javax.xml.stream.isSupportingExternalEntities und javax.xml.stream.isValidating hängen nur davon ab, ob Sie der Meinung sind, dass Sie eine Validierung benötigen.

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

Schauen Sie auch in die StaX-Parser, ob es sinnvoll, für Ihren Gebrauch macht.

+0

Ich schätze die Antwort. Der Kern des Problems bestand darin, dass die für die WebLogic-Serverkonfiguration Verantwortlichen die Änderungen der XML-Registrierung aufgrund der Beschränkungen ihres ausgehenden Zugriffs nicht vornehmen konnten. Sie wollten, dass wir JARs von Drittanbietern ändern, um die Systemkennungen aus allen DTDs zu entfernen. –

Verwandte Themen