Передайте сонар 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).).
Митфиндель прав. Единственный вариант - пометить проблемы "Не удалось исправить" или, если это не доступно в вашей версии платформы, "Ложный позитив".
Для этих правил безопасности не существует "правильного решения кода". Это потому, что они предназначены для предупреждения аудитора безопасности человека о всех потенциальных проблемах. Затем аудитор должен изучить код и либо закрыть проблему ("Не исправит"), либо поставить ее перед соответствующей командой.
Вы можете найти больше в документах.