2012-06-13 3 views
0

Мне нужно исправить проблему для уязвимости xss. сегмент кода ниже.XSS УЯЗВИМОСТЬ ДЛЯ XML - response.getWriter(). Write (xml.toString());

StringBuffer xml = new StringBuffer(); 
         xml.append("<?xml version=\"1.0\"?>"); 
         xml.append("<parent>"); 
         xml.append("<child>"); 

          for(int cntr=0; cntr < dataList.size(); cntr++){ 

          AAAAA obj = (AAAAA) dataList.get(cntr); 
          if(obj.getStatus().equals(Constants.ACTIVE)){ 

           xml.append("<accountNumber>"); 
           xml.append(obj.getAccountNumber()); 
           xml.append("</accountNumber>"); 

           xml.append("<partnerName>"); 
           xml.append(obj.getPartnerName()); 
           xml.append("</partnerName>"); 

           xml.append("<accountType>"); 
           xml.append(obj.getAccountType()); 
           xml.append("</accountType>"); 

           xml.append("<priority>"); 
           xml.append(obj.getPriority()); 
           xml.append("</priority>"); 
           } 
          } 

         xml.append("</child>"); 
         xml.append("</parent>"); 


        response.getWriter().write(xml.toString()); 
        response.setContentType("text/xml"); 
        response.setHeader("Cache-Control", "no-cache"); 

Вопрос заключается в линии, имеющей синтаксис response.getWriter() писать (XML.toString()). В нем говорится, что он уязвим для атаки xss. Я сделал достаточную работу на дому, а также установил ESAPI 2.0. но я не знаю, как реализовать решения. Пожалуйста, предложите решение.

ответ

0

Вы всегда должны избежать любой текст и узлы атрибутов, которые вы вставляете в документ XML, так что я бы ожидал увидеть

xml.append("<accountType>"); 
xml.append(escape(obj.getAccountType())); 
xml.append("</accountType>"); 

где побег() выглядит после того, как символы, которые нуждаются в специальной обработке, например. «<», «&», «]]>» и суррогатные пары.

Лучше, не строите XML путем конкатенации строк. Используйте библиотеку сериализации, которая позволяет писать

out.startElement("accountType"); 
out.text(obj.getAccountType()); 
out.endElement(); 

(я использую Saxon сериалайзер с интерфейсом StAX XMLStreamWriter, когда мне нужно сделать это, но есть много доступных альтернатив.)

+0

вы можете предоставить мне полный соответствующий сегмент кода для сериализации xml, который вы использовали. –

+0

Здесь вы можете найти пример, поиск метода generateXML: https://dev.saxonica.com/repos/archive/opensource/latest9. 4/Хей/нетто/SF/саксонской/сериализации/codenorm/UnicodeDataGenerator.java –

0

Как я могу понять:

AAAAA obj = (AAAAA) dataList.get(cntr); 

здесь у вас есть какие-то данные из внешнего источника. Затем вы должны проверить эти данные. В противном случае любой может поместить туда любые данные, которые могут привести к разрушению на стороне клиента (например, куки будут украдены).

+0

Данные в вышеуказанной ссылке AAAAA obj = (AAAAA) dataList.get (cntr); извлекается из базы данных. Итак, как это можно было бы манипулировать, во-первых. Во-вторых, даже если мне нужно его проверить, как это сделать через ESAPI из OWASP, скажите, пожалуйста. Еще одна вещь, вы рассказываете мне о сохраненной уязвимости xss, то есть данные, поступающие из базы данных, возможно, были обработаны раньше, и когда я когда-либо получаю ее, мне нужно ее проверить? –

+0

Вы должны проверить данные, прежде чем хранить их в базе данных, если сможете. В противном случае вы должны проверить его, когда получаете его из базы данных. –

0

ANSWER-- код, использующий ESAPI, приведен ниже. xml.append (ESAPI.encoder(). EncodeForXML (desc)); Он будет избегать данных в переменной «desc». Посредством реализации этого содержимого в переменной «desc» будет считываться как не исполняемый код, и, следовательно, данные не будут выполняться в браузере при ответе кода java-кода на задней панели.

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