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