2015-06-18 2 views
0

У меня есть два вопроса, о которых сонар печально. Сначала один в строке коды с относительным путем обходом вопросом, который выглядит следующим образом:Пасс сонара PT_RELATIVE_PATH_TRAVERSAL в java

File f = new File(MY_DIR + filename); 

Где файл является параметром, я получил от запроса.
Вторая строка - об абсолютной проблеме обхода пути, которая выглядит так же, за исключением того, что нет MY_DIR спереди.

Я добавил проверку достоверности после этих строк, используя метод, который гарантирует, что файл находится в директории my_dir используя канонические пути, так что теперь она выглядит следующим образом:

... 
File rootDirFile = new File(MY_DIR); 
     if (validateFileName(rootDirFile, f)) { 
... 
private static boolean validateFileName(File targetDir, File fileToCheck) throws IOException { 
    String targetDirPath = targetDir.getCanonicalPath() + File.separator; 
    String pathToCheck = fileToCheck.getCanonicalPath(); 

    return pathToCheck.startsWith(targetDirPath); 
} 

Но эхолота еще говорят, что я У меня есть уязвимость в этих двух строках. Как это сказать, я нашел решение?

ответ

1

В зависимости от вашей версии вы можете отметить проблему как «не исправить» (это означает, что долг от этой проблемы принят - с 5.1) или «False positive» (что означает, что вы считаете, что механизм анализа неправильный - до 5.1).

+0

Спасибо! Это похоже на решение для меня :) –

2

Mithfindel является правильным. Ваш единственный вариант - отметить проблемы «Не исправить» или если это не доступно в вашей версии platorm, «False Positive».

Для этих правил безопасности не существует «правильного кодового решения». Это связано с тем, что они предназначены для предупреждения аудитора безопасности человека по всем потенциальным проблемам. Затем аудитору необходимо проверить код и закрыть вопрос («Не исправить») или поднять его с помощью соответствующей команды.

Вы можете найти более in the docs.

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