2012-06-19 3 views
3
String id = request.getParameter("id") != null ? request.getParameter("id") : "0"; 
      aaaa doc = bbb.getdetailsById(id);  
      byte b[] = doc.getUploaded();   
      try { 
       response.setContentType("APPLICATION/OCTET-STREAM"); 
       String disHeader = "Attachment;Filename=" + doc.getName(); 
       response.setHeader("Content-Disposition", disHeader); 
       servletoutputstream = response.getOutputStream(); 
       servletoutputstream.write(b, 0, b.length); 
} 

У меня есть этот кусок кода. средство проверки кода говорит, что servletoutputstream.write (b, 0, b.length); xss уязвим. но я не знаю, как он сообщает об этом. и как это исправить. Я использую ESAPI для проверки ввода и для выхода из вывода в другой уязвимой уязвимости xss. мне тоже нужно сделать то же самое? пожалуйста, дайте предложения или решения. после выполнения некоторых исследований я обнаружил, что байт b [] должен быть escape для htmlESCAPE или xmlESCAPE с помощью ESAPI. он решит проблему?xss уязвимость с servletoutputstream.write

+0

Кажется, что ваш код отправляет какой-то загруженный файл или еще что-то? В таком случае вы не хотите каким-либо образом его модифицировать. –

ответ

1

Validate вход 'идентификатор', используя ESAPI, например. Подтвердите имя файла для FILE DOWNLOAD INJECTION, используя ESAPI. также проверите байт b [], используя getVAlidatedFileContent(), используя ESapi.

Это случай НЕИСПРАВНОСТИ ХРАНЕНИЯ ХСС.

0

Если вы используете Spring MVC, есть функция для этой цели, включен следующим образом:

<context-param> 
    <param-name>defaultHtmlEscape</param-name> 
    <param-value>true</param-value> 
</context-param> 

here is the clue

2nd clue

+0

может у вас xplain, что это предназначено? это из эсапи из оваса? –

+0

Без какого-либо дополнительного контекста или объяснения это просто неправильно. –

+0

есть ссылка в моем комментарии – user965347

1

если таковой getUploaded() возвращают некоторый Javascript код, который загружается хакером <script>alert('hi')</script>, то это может создать проблему.

Вы можете попробовать следующее решение для форматирования строк, которые поставляются с каркасом Spring.

HtmlUtils.htmlEscape("<script> alter(''hi)</script>") 

Выход:

&lt;script&gt; alter(''hi)&lt;/script&gt 

Вы можете библиотека JSTL также форматировать строку, содержащую javascript.

public static byte[] getFormatedString(byte[] string){ 

    String str=new String(string); 
    str=HtmlUtils.htmlEscape(str); 
    return str.getBytes(); 

} 

Ваш код:

String id = request.getParameter("id") != null ? request.getParameter("id") : "0"; 
    aaaa doc = bbb.getdetailsById(id);  
    byte b[] = doc.getUploaded();   
    try { 
     response.setContentType("APPLICATION/OCTET-STREAM"); 
     String disHeader = "Attachment;Filename=" + doc.getName(); 
     response.setHeader("Content-Disposition", disHeader); 
     servletoutputstream = response.getOutputStream(); 
     servletoutputstream.write(getFormatedString(b), 0, b.length); 
+0

, даже если он имеет тип байта? –

+0

Он принимает параметр string как параметр, чтобы вы могли скрывать байт [] в строке, а затем форматировать его и снова преобразовывать в байт []. – amicngh

+0

делает escaping либо из htmlEscape, либо с помощью ESAPI по OWASP, например ESAPI.encoder(). EncodeForHTML - лучшее решение для решения этих проблем в xss? есть ли у вас какие-либо другие решения или предложения, так как я не могу проверить это решение и должен был доставить его непосредственно клиенту? –

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