XML проверка с DTD и XSD - PullRequest
       35

XML проверка с DTD и XSD

0 голосов
/ 09 апреля 2020

У меня проблемы с передачей анализатора инструмента stati c с помощью Fortify (OWSAP A1 Injection) - Отсутствует XML Проверка

После http://www.kdgregory.com/index.php?page=xml.parsing я реализовал схему XSD для своего проверка, но она все еще не проходит из-за dbf.setValidating (false) , поэтому мне пришлось установить его в значение true, чтобы оно проходило через инструмент сканирования ...

При установке на истинные предупреждения могут быть видно, потому что мой XML не является DocType ...

enter image description here

Я знаю, что могу использовать трансформатор, чтобы помочь мне установить, но он все равно не работает documentBuilder.parse (is)

После добавления этой строки в мое XML Сообщение

<!DOCTYPE schema PUBLIC "http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

Может появиться другое предупреждение, Я потерял попытки пройти анализ stati c для моих кодов. Пожалуйста, прокомментируйте, чтобы я мог предоставить больше деталей или примеров, если это необходимо ..

Моя конечная цель - полностью удалить предупреждения ..

enter image description here

XML

<?xml version="1.0" encoding="UTF-8"?>
    <Message>
       <MessageType>...</MessageType>
       <ID>...</TransactionID>
       <FID>fileID</FID>
       <FileName>jpg</FileName>
       <FileContent>....</FileContent>
    </Message>

Подтвердить XML Код

public static Document getValidatingXmlParser(String schemaFile, String xmlStr) throws IOException, TransformerConfigurationException{
DocumentBuilder documentBuilder = null;
Document document = null;
InputStream is = new ByteArrayInputStream(xmlStr.getBytes("UTF-8"));

try {

    SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = factory.newSchema(new StreamSource(schemaFile));

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    dbf.setValidating(true);
    dbf.setSchema(schema);
    dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
    dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    dbf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
    dbf.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
    documentBuilder = dbf.newDocumentBuilder();
    documentBuilder.setErrorHandler(new SAXErrorHandler());
    document = documentBuilder.parse(is);
    document.getDocumentElement().normalize();
} catch (ParserConfigurationException e) {
    log.debug("Unable to create XML parser" + e);
} catch (SAXException e) {
    log.debug("XML parsing exception while loading schema: " + e);
} catch (UnsupportedOperationException e) {
    log.debug("UnsupportedOperationException" + e);

}
return document;

}

...