Передайте сонар PT_RELATIVE_PATH_TRAVERSAL в Java

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

File f = new File(MY_DIR + filename);

Где 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);
}

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

2 ответа

Решение

В зависимости от вашей версии вы можете пометить проблему как "Не исправлю" (это означает, что задолженность по этой проблеме принята - начиная с версии 5.1) или "Ложно-положительно" (что означает, что вы считаете, что механизм анализа неверен - до версии 5.1).).

Митфиндель прав. Единственный вариант - пометить проблемы "Не удалось исправить" или, если это не доступно в вашей версии платформы, "Ложный позитив".

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

Вы можете найти больше в документах.

Другие вопросы по тегам