2009-07-30 82 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

相关问题