Changeset 9655e79


Ignore:
Timestamp:
Aug 6, 2014 6:13:54 PM (6 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
2878a648
Parents:
d1a2e24
Message:

UPnP: Disable external entities in XML parser

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/org/cybergarage/xml/parser/JaxpParser.java

    rd1a2e24 r9655e79  
    2222package org.cybergarage.xml.parser;
    2323
     24import java.io.ByteArrayInputStream;
    2425import java.io.FilterInputStream;
    2526import java.io.IOException;
     
    2829import javax.xml.parsers.DocumentBuilder;
    2930import javax.xml.parsers.DocumentBuilderFactory;
     31import javax.xml.parsers.ParserConfigurationException;
    3032
    3133import org.cybergarage.xml.Node;
     
    3436import org.w3c.dom.Document;
    3537import org.w3c.dom.NamedNodeMap;
     38import org.xml.sax.EntityResolver;
    3639import org.xml.sax.InputSource;
    3740
     
    117120               
    118121                try {
     122                        // https://www.owasp.org/index.php/XML_External_Entity_%28XXE%29_Processing
    119123                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     124                        factory.setValidating(false);
     125                        factory.setNamespaceAware(true);
     126                        factory.setExpandEntityReferences(false);
     127                        try {
     128                            factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
     129                        } catch (ParserConfigurationException pce) {}
     130                        try {
     131                            factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
     132                        } catch (ParserConfigurationException pce) {}
     133                        try {
     134                            factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
     135                        } catch (ParserConfigurationException pce) {}
     136                        try {
     137                            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
     138                        } catch (ParserConfigurationException pce) {}
    120139                        DocumentBuilder builder = factory.newDocumentBuilder();
     140                        builder.setEntityResolver(new BlankingResolver());
    121141                        InputSource inSrc = new InputSource(new NullFilterInputStream(inStream));
    122142                        Document doc = builder.parse(inSrc);
     
    164184                }
    165185        }
     186
     187        /**
     188         *  I2P -
     189         *  http://stackoverflow.com/questions/5883542/disable-xml-validation-based-on-external-dtd-xsd
     190         */
     191        private static class BlankingResolver implements EntityResolver {
     192                private static final byte[] DUMMY = new byte[0];
     193
     194                public InputSource resolveEntity(String arg0, String arg1) {
     195                        return new InputSource(new ByteArrayInputStream(DUMMY));
     196                }
     197        }
    166198}
Note: See TracChangeset for help on using the changeset viewer.