2009-07-30 83 views
4

我們有一個使用SiteMesh的應用程序,當WebLogic嘗試解析TLD文件時,它會在「http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd」處看到DOCTYPE規範,其中包含對TLD DTD的引用。WebLogic XML外部實體解析:除了使用XML註冊表之外,還有其他方法嗎?

服務器無法啓動到Internet的出站連接,因此無法檢索導致部署應用程序失敗的DTD。

我知道這個問題可以通過在WebLogic控制檯中設置一個XML註冊表來解決,並且在嘗試解析時指定一個返回的本地文件,例如「http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd」。

是否有任何其他方式來防止服務器走出去'網絡來解決外部實體引用?通過將DTD與應用程序一起打包,並以某種方式通知服務器在那裏尋找那個DTD,而不是「在那裏」?

回答

2

快速的問題是你想這樣做是出於安全原因?喜歡防止任何形式的XXE攻擊?

如果是這樣,您可以實現您自己的EntityResolver並處理解析器如何執行本地或遠程查找。

的例子可以在這裏找到https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=61702260

否則你需要設置的XMLInputFactory的配置屬性得到你想要的行爲。特別是javax.xml.stream.isSupportingExternalEntities和javax.xml.stream.isValidating只是取決於你是否認爲需要驗證。

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

還應考慮StAX的解析器是否有意義供您使用。

+0

我很欣賞這種迴應。問題的核心是那些負責WebLogic服務器配置的人拒絕通過出站訪問限制來改變XML註冊表的更改。他們希望我們修改第三方JAR以從所有DTD中刪除系統標識符。 – 2013-03-20 21:35:42

相關問題