Как исправить уязвимость, связанную с обработкой пути (проверка входных данных и представление, поток данных)

#java #file #path #fortify

#java #файл #путь #укрепить

Вопрос:

Я получаю уязвимость при обработке пути для создания файла с новым ключевым словом

Я попытался очистить путь перед передачей его файловому объекту, но проблема сохраняется. Пробовал также эту ссылку: https://www.securecoding.cert.org/confluence/display/java/FIO00-J. Do not operate on files in shared directories

 public static String sanitizePath(String sUnsanitized) throws URISyntaxException, EncodingException {

   String sSanitized = SAPI.encoder().canonicalize(sUnsanitized);
   return sSanitized;

}


//// the main method code snippet /////

String sSanitizedPath = Utils.sanitizePath(file.getOriginalFilename());

-- fortify scan detects problem here ..in below line --

File filePath = new File(AppInitializer.UPLOAD_LOCATION, sSanitizedPath);

String canonicalPath = filePath.getCanonicalPath();
FileOutputStream fileOutputStream = new FileOutputStream(canonicalPath);
  

После santizePath я думал, что проверка не будет pick, vulnerabilit, но это произошло.

Комментарии:

1. Я попробовал новый файл(path.normalize().toString()), но это также не работает. Фактически это подняло еще 1 флаг для уязвимости

Ответ №1:

Эта переменная «sUnsanitized» поступает из пользовательского ввода? Возможно, это ваша настоящая проблема.

Никогда не доверяйте пользовательскому вводу — это правило номер один для разработки.

Комментарии:

1. Имя файла берется из пользовательского ввода, другого способа нет, кроме как обработать ввод.

2. Вам действительно нужно сохранять исходное имя файла? Если это так, хорошо. Вам просто нужно позаботиться о самом имени файла. Я, парень, могу отправить вам .cmd, .bat, .exe что-то вроде этого. Если вы позаботитесь об этой проблеме, можете ли вы пометить это как ложноположительное.