我正在调用使用OSB 11.x创建并部署在Weblogic 10.x上的代理服务(SOAP)。 我必须限制xml实体扩展,但不能正常工作。
当我们使用SOAP UI命中请求时,则&xxe;当请求到达OSB的代理层时,获取实际值,即:“ NewName”。
OSB的第一步是记录错误,并记录实体可验证扩展的请求。
在达到代理服务之前,我们如何限制此限制。我需要确保XML解析器不应处理请求的文档类型。
<!DOCTYPE foo [<!ENTITY xxe "NewName">]>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:man="http://nil.api.com/xsd/manageemployee_1">
<soapenv:Header/>
<soapenv:Body>
<man:ManageEmployee_1Request>
<man:employeeDeatil>
<man:id>11</man:id>
<man:firstName>&xxe;</man:firstName>
</man:employeeDeatil>
</man:ManageEmployee_1Request>
</soapenv:Body>
</soapenv:Envelope>
我已经如下定制了自定义解析器,并在OSB_Domain \ bin的'startWebLogic.cmd'中设置了类路径
set CLASSPATH =%CLASSPATH%;%DOMAIN_HOME%\ customXMLRegistry \ xercesImpl-2.6.2-jaxb-1.0.6.jar;%DOMAIN_HOME%\ customXMLRegistry \ CustomXMLParser-0.0.1-SNAPSHOT.jar
注意:即使使用自定义文档和SAX解析器创建XML注册表也行不通。
1)自定义文档生成器
导入com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl; 公共类CustomDocumentBuilderFactoryImpl扩展了DocumentBuilderFactoryImpl {
public ZaapCustomDocumentBuilderFactoryImpl() {
super();
}
@Override
public DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
System.out.println("=====================Start Parser=======");
setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
setXIncludeAware(false);
setExpandEntityReferences(false);
System.out.println("=====================End Parser=======");
return super.newDocumentBuilder();
}
}
2)自定义Sax解析器
导入com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl; 公共类CustomSaxParseFactoryImpl扩展了SAXParserFactoryImpl {
public ZaapCustomSaxParseFactoryImpl() {
super();
}
@Override
public SAXParser newSAXParser() throws ParserConfigurationException {
System.out.println("------------------------- NNN: SAXParser-----");
try {
System.out.println("----SAXParser-----");
setFeature("http://xml.org/sax/features/external-general-entities",false);
setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
return super.newSAXParser();
} catch (SAXNotRecognizedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
// return super.newSAXParser();
}
}