Abh*_*ngh 5 java xml xml-parsing xxe
我想在我的项目中防止 XXE 攻击。这是在 java 7(没有 maven)和 jboss-as-7 服务器上运行的旧 api 项目。但是在执行过程中我得到错误: org.xml.sax.SAXNotRecognizedException: Property ' http://javax.xml.XMLConstants/property/accessExternalDTD ' is notknowledge。
org.xml.sax.SAXNotRecognizedException: Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.
15:19:02,845 ERROR [stderr] (http-localhost-127.0.0.1-8080-3) at org.apache.xerces.jaxp.validation.ValidatorImpl.setProperty(ValidatorImpl.java:218)
15:19:02,846 ERROR [stderr] (http-localhost-127.0.0.1-8080-3) at com.uid.kua.web.KUARestController.authenticateAtAUA(KUARestController.java:118)
15:19:02,847 ERROR [stderr] (http-localhost-127.0.0.1-8080-3) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
15:19:02,847 ERROR [stderr] (http-localhost-127.0.0.1-8080-3) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
15:19:02,848 ERROR [stderr] (http-localhost-127.0.0.1-8080-3) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
15:19:02,849 ERROR [stderr] (http-localhost-127.0.0.1-8080-3) at java.lang.reflect.Method.invoke(Method.java:606)
Run Code Online (Sandbox Code Playgroud)
我已经搜索过它,每个论坛都有不同的含义,说它是一个错误。我还没有找到针对此异常的任何相关解决方案。请帮忙。提前致谢。
最后我解决了它。我发布了答案,以防这对任何人有帮助。通过在线解决方案后,我无法检测到导致上述错误的主要问题。对于 xxe 预防,我们需要一些定义的属性,例如: XMLConstants.ACCESS_EXTERNAL_DTD XMLConstants.ACCESS_EXTERNAL_SCHEMA
我们需要xerces和jaxp-api jar 来传递 xml,并通过设置上述一些属性来防止 api 提供的 xxe 解析 xml。在JDK 7之前,这些已经包含在 JDK 7 及更高版本中。所以我们不需要在我们的项目类路径中导入上面的 jars。
就我而言,我使用 jboss-as-7.1.1.Final 作为应用程序服务器,它也有自己的 xerces jar (org.apache.xerces. )。但是 java 也带有它自己的 xerces 和 jaxp 实现(com.sun.xerces.)。因此,在部署战争时,我们会收到上述错误,因为这两个 jar 会在 jboss 加载它自己的 xerces jar 时相互冲突。
解决方案: 我们需要通过在jboss/org/apache/xerces/main/modules.xml文件中进行更改来排除jboss xerces 实现。注释掉如下所示的行:
> <module xmlns="urn:jboss:module:1.1" name="org.apache.xerces">
> <!--
> <resources>
> <resource-root path="xercesImpl-2.9.1-jbossas-1.jar"/>
> Insert resources here
> </resources>
> -->
> <dependencies>
> <module name="javax.api"/>
> </dependencies>
>
> </module>
Run Code Online (Sandbox Code Playgroud)
现在部署并运行您的应用程序。快乐编码。
小智 7
似乎在 JAXP 1.5 中引入了属性accessExternalDTD和accessExternalSchema。但是,Java EE 6(甚至仍然是 Java EE 8)仅随 JAXP 1.4 一起提供。
在我的例子中(在 WildFly 19 和 AdoptOpenJDK 11 上运行),我能够通过使用Java 9 中引入的静态newDefaultInstance()方法来获取 JDK 的DocumentBuilderFactory和SchemaFactory的默认实例。在 Java 8 中,这两个类也有一个newInstance方法您可以在其中指定类名,即com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl和com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory。
此解决方案避免更改 JBoss 模块。
| 归档时间: |
|
| 查看次数: |
11604 次 |
| 最近记录: |