2014-01-21 2 views
5

Fority сканирование сообщило о проблемах безопасности «Путь Manipulation» в следующем фрагментеFortify Пути Манипуляция ошибка

String filePath = getFilePath(fileLocation, fileName); 
final File file = new File(filePath); 
LOGGER.info("Saving report at : " + filePath); 
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file)); 
fileWriter.write(fileContent); 

поэтому я проверка в черный список символов в fileLocation и бросать исключение, по-прежнему Fortify бросает исключение.

try { 
    String filePath = getFilePath(fileLocation, fileName); 
    if (isSecurePath(filePath)) { 
     final File file = new File(filePath); 
     LOGGER.info("Saving report at : " + filePath); 
     BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file)); 
     fileWriter.write(fileContent); 
    } else { 
     throw new Exception("Security Issue. File Path has blacklisted characters"); 
    } 

} catch (final Exception e) { 
    LOGGER.error("Unable to prepare mail attachment : ", e); 
    message = "Mail cannot be send, Unable to prepare mail attachment"; 
} 


private boolean isSecurePath(String filePath) { 
    String[] blackListChars = {".."}; 
    return (StringUtils.indexOfAny(filePath, blackListChars)< 0); 
} 

Должен ли я игнорировать отчет о сканировании или что было бы правильным решением для этого?

+0

Посмотрите это также https://security.stackexchange.com/questions/103884/how-to-resolve-path-manipulation-error-given-by-fortify –

ответ

1

Во-первых, SCA - это инструмент статического анализа, поэтому вы не можете проверить свою пользовательскую проверку, чтобы определить, работает ли она правильно или нет, поскольку это то, что предназначен для работы с таким динамическим инструментом, как WebInspect.

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

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

Нет никакого способа определить, указывает ли кто-либо полный путь, или кто-то попадает в каталог, являющийся символической ссылкой на отдельный каталог, вместе с несколькими другими возможными альтернативными атаками.

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

Выполнение этого позволит избавиться от самой проблемы, но SCA, вероятно, все еще покажет проблему в результатах (опять же из-за различий между статическим и динамическим анализом). Это можно обойти, проверяя его как таковое или создавая собственное правило очистки для функции, которая проверяет проблему.