Исправление ошибки манипуляции пути - PullRequest
2 голосов
/ 17 марта 2012

Fortify выдает ошибку манипулирования путями в строке, где производится сравнение нового файла (пути).Я использую Struts 2.

Может кто-нибудь сказать мне, как исправить эту проблему, чтобы fortify не выдавал эту ошибку?

private boolean filePresent(String fileName) {
    if (fileName != null) {
        String path = getDirPath();
        if (path != null) {
            path = path.endsWith("/") ? path : path + "/";
            path = path + fileName;
            if (new File(path).exists()) {
                setFileName(fileName);
                return true;
            }
        }
    }
    return false;
}

Мне нужно посмотреть, есть ли файлприсутствует или нет на нашем веб-сервере и, следовательно, я передаю имя файла в качестве аргумента, получая полный путь к каталогу из файла web.xml, добавляя его к имени файла, а затем составляя путь и проверяя его по объекту File, чтобы проверить,присутствует или нет.

Ответы [ 2 ]

4 голосов
/ 31 марта 2012

Вы не хотите, чтобы удаленный веб-пользователь видел, существует ли C: / Windows / System32, или существует / etc / hosts, потому что это позволяет им проводить судебные исследования на вашем сервере.

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

Есть два способа решить проблему:

  1. Подход белого списка.Очистите все символы входного параметра и разрешите только "a" - "z" и, возможно, "."Бросьте исключение, если входные данные выходят за эти границы.

1a.Или, если вы знаете, что список допустимых файлов меньше 20, просто перечислите их, а если входные данные не соответствуют друг другу, выведите исключение.

  1. Подход черного списка.Проверьте входные данные и сгенерируйте исключение, если оно содержит какую-либо последовательность «..» или любые прямые или обратные слэши.В общем, это не глубокая защита, но для вашей функции, как я сейчас ее прочитал, все будет в порядке.
0 голосов
/ 19 декабря 2013

Вы можете даже использовать фильтр, чтобы сделать это как

в фильтре

chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);

в RequestWarper используйте что-то вроде

if(value.contains("..\\"))
value = value.replace("..\\", "");
        if(value.contains("../"))
            value = value.replace("../", "");
        if(value.contains("./"))
            value = value.replace("./", "");
...