如何针对SOAP请求限制Weblogic服务器上的xml实体扩展

时间:2019-01-26 20:39:46

标签: soap doctype weblogic-10.x osb

我正在调用使用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();
}

}

0 个答案:

没有答案