最近,我们对我们的代码进行了安全审核,其中一个问题是我们的应用程序受Xml外部实体(XXE)攻击.
基本上,应用程序是一个通过Web服务以XML形式接收输入的计算器.
以下是对我们的应用程序进行此类XXE攻击的示例:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<foo:calculateStuff>
<!--Optional:-->
<xmlInput><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE currency [
<!ENTITY include SYSTEM "file:///d:/" >]>
<calcinput>...</calcinput>
]]></xmlInput>
</foo:calculateStuff>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
如您所见,我们可以引用指向外部文件("file:///d:/")的实体.
关于XML输入本身(该<calcinput>...</calcinput>部分)是使用JAXB(v2.1)解组的.Web服务部分基于jaxws-rt(2.1).
我需要做些什么来保护我的网络服务?