2015-05-06 3 views
2

возможно ли с помощью xmlpullfactory XXE и миллиард смеется? Я пробовал ниже XML-кодXXE и МЛРД СМЕЕТСЯ

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE author [ 
<!ELEMENT author (#PCDATA)> 
<!ENTITY js "Jo Smith"> 
]> 
<author>&js;</author> 

разобран выше XML-файл с помощью ниже Java код используется kxml2-2.3.0.jar

try 
{ 
     XmlPullParserFactory factory =XmlPullParserFactory.newInstance(); 
     XmlPullParser parser = factory.newPullParser(); 
     File file=new File("index.xml"); 
     FileReader fileReader = new FileReader(file); 
     BufferedReader bufferedReader = new BufferedReader(fileReader); 
     StringBuffer stringBuffer = new StringBuffer(); 
     String line; 
     while ((line = bufferedReader.readLine()) != null) { 
      stringBuffer.append(line); 
      stringBuffer.append("\n"); 
     } 
     fileReader.close(); 
     parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,true); 
     parser.setInput(new StringReader(stringBuffer.toString())); 
     while (true) { 
       int event = parser.nextToken(); 
       if (event == XmlPullParser.START_TAG) { 
        System.out.println("Start-tag: " + parser.getName()) ; 
       } 
       else if (event == XmlPullParser.END_TAG) { 
        System.out.println("End-tag: " + parser.getName()); 
       } 
       else if (event == XmlPullParser.START_DOCUMENT) { 
        System.out.println("Start document: " + 
        parser.getText()); 
       } 
       else if (event == XmlPullParser.TEXT) { 
        System.out.println("Text: " + parser.getText()); 
       } 
       else if (event == XmlPullParser.CDSECT) { 
        System.out.println("CDATA Section: " +  
        parser.getText()); 
       } 
       else if (event == XmlPullParser.COMMENT) { 
        System.out.println("Comment: " + parser.getText()); 
       } 
       else if (event == XmlPullParser.DOCDECL) { 
        System.out.println("Document type declaration: " +  
        parser.getText()); 
       } 
       else if (event == XmlPullParser.ENTITY_REF) { 
        System.out.println("Entity Reference: " + 
        parser.getName()); 
        System.out.println("Entity Reference value: " +  
        parser.getText()); 
       } 
       else if (event == XmlPullParser.IGNORABLE_WHITESPACE) { 
        System.out.println("Ignorable white space: " + 
        parser.getText()); 
       } 
       else if (event == XmlPullParser.PROCESSING_INSTRUCTION) 
       { 
        System.out.println("Processing Instruction: " +  
        parser.getText()); 
       } 
       else if (event == XmlPullParser.END_DOCUMENT) { 
        System.out.println("End Document: " +  
        parser.getText()); 
        break; 
       } // end else if 
       } // end while 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

ПРТ ВЫХОД КАК

Ignorable белого пространства:

декларации типа документа :

author [ 
<!ELEMENT author (#PCDATA)> 
<!ENTITY js "Jo Smith"> 
] 

Ignorable белое пространство: Start-тег: автор

Entity Reference: JS

Entity Reference значение: нулевое

Конечный тег: автор Ignorable белое пространство:

Заключительный документ: null

Но я хотел бы получить значение ссылки объекта как josmith.what будет проблема?

ответ

0

Из документов API, похоже, вам необходимо установить функцию FEATURE_PROCESS_DOCDECL.

+0

, когда я установил эту функцию, получил исключение в качестве неподдерживаемой функции. – user3748225

+0

@ user3748225 Если код не может расширять сущность, он, по-видимому, не будет уязвим для DoSs расширения сущностей. –

Смежные вопросы