我们有一个使用SiteMesh的应用程序,当WebLogic尝试解析TLD文件时,它会在“http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd”处看到DOCTYPE规范,其中包含对TLD DTD的引用。
服务器无法启动到Internet的出站连接,因此无法检索DTD,导致应用程序的部署失败。
我知道可以通过在WebLogic控制台中设置XML注册表并指定尝试解析时要返回的本地文件来解决此问题,例如“http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd”。
有没有其他方法可以阻止服务器转出'net来解析外部实体引用?通过将DTD与应用程序打包在一起并以某种方式通知服务器在那里寻找DTD而不是“在那里”?
答案 0 :(得分: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解析器。