4

我们有一个使用 SiteMesh 的应用程序,当 WebLogic 尝试解析 TLD 文件时,它会在“ http://java.sun.com/dtd/web-jsptaglibrary_1_2 看到包含对 TLD DTD 的引用的 DOCTYPE 规范。 dd "。

服务器无法发起到 Internet 的出站连接,因此无法检索 DTD,从而导致应用程序部署失败。

我知道这个问题可以通过在 WebLogic 控制台中设置 XML 注册表来解决,并在尝试解决时指定要返回的本地文件,例如“ http://java.sun.com/dtd/web-jsptaglibrary_1_2. dd "。

有没有其他方法可以防止服务器出网来解析外部实体引用?通过将 DTD 与应用程序打包并以某种方式通知服务器在其中而不是“在外面”查找 DTD?

4

1 回答 1

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 解析器。

于 2012-09-26T15:52:16.753 回答