2012-03-16 2 views
2

Fortify дает ошибку Manipulation Path в строке, где производится сравнение File (path). Я использую Struts 2.Ошибка манипулирования контуром Fixing

Может ли кто-нибудь сказать мне, как исправить эту проблему, чтобы fortify не допустил эту ошибку?

private boolean filePresent(String fileName) { 
    if (fileName != null) { 
     String path = getDirPath(); 
     if (path != null) { 
      path = path.endsWith("/") ? path : path + "/"; 
      path = path + fileName; 
      if (new File(path).exists()) { 
       setFileName(fileName); 
       return true; 
      } 
     } 
    } 
    return false; 
} 

Мне нужно видеть, присутствует ли или нет в нашем веб-сервере & поэтому я передаю имя файла в качестве аргумента, получая весь путь к каталогу из web.xml, добавив его имя файла & файл затем составляя путь &, проверяя его на объект File, чтобы узнать, присутствует он или нет.

ответ

4

Вы не хотите, чтобы пользователь удаленного веб-сайта видел, существует ли C:/Windows/System32 или существует/etc/hosts, поскольку это позволяет им проводить судебно-медицинские исследования на вашем сервере.

Возможно, вы не понимали, что ваша функция позволяет им делать именно это, включив соответствующее количество последовательностей «..» во входную строку.

Есть два способа, чтобы остановить эту проблему:

  1. Whitelist подход. Скраб всех символов в параметре ввода и разрешите только «а» через «z» и, возможно, «.». Выбросьте исключение, если вход выходит за пределы этих границ.

1a. Или, если вы знаете, что список допустимых файлов меньше 20, просто перечислите их и если вход не делает точное совпадение, выбросьте исключение.

  1. Черный список подход. Проверьте вход и выведите исключение, если оно содержит любую последовательность «..» или любые косые черты или обратную косую черту. Это GENERALLY не защита в глубину, но для вашей функции, когда я прочитал ее прямо сейчас, все будет в порядке.
0

Вы даже можете использовать фильтр, чтобы сделать это, как

в фильтр

chain.doFilter(new RequestWrapper((HttpServletRequest) request), response); 

в RequestWarper использовать что-то вроде

if(value.contains("..\\")) 
value = value.replace("..\\", ""); 
     if(value.contains("../")) 
      value = value.replace("../", ""); 
     if(value.contains("./")) 
      value = value.replace("./", "");