2013-03-26 2 views
0

В Java, являются эти же самое:местоположение файла Жека формате Строка

new File (a.getPath() + filename); 
new File (String.format(a.getPath() + filename)); 

Я получаю некоторое предупреждение в FindBugs, а второй вариант кажется, чтобы исправить это.

+1

Что предупреждения вы получаете? –

+0

Это предупреждение PT_RELATIVE_PATH_TRAVERSAL – emochoco

ответ

8

Оба являются плохими вариантами ИМО. Если идея состоит в том, чтобы объединить имя каталога с именем файла, используйте File конструктор, который разработан специально для этого:

new File(a.getPath(), filename) 

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

+0

Хорошо, я думаю, это делает трюк – emochoco

2

String.format() ничего не делает если ваша строка не является format string, и вы добавляете дополнительные аргументы, поэтому в этом случае похоже, что вы просто скрываете предупреждение. Скорее всего FindBugs знает, что new File(a + b); является, возможно, ошибкой, но не знает, есть ли ошибка new File(someFunction());.

По the documentation for PT_RELATIVE_PATH_TRAVERSAL:

Программное обеспечение использует параметр запроса HTTP, чтобы построить путь , который должен быть в пределах ограниченного каталога, но это не правильно обезвредить последовательности, такие как «..», который может разрешить местоположение, которое находится за пределами этого каталога. См. http://cwe.mitre.org/data/definitions/23.html для получения дополнительной информации.

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

Итак, String.format() трюк работает, потому что FindBugs может только поймать очевидные случаи, но большая проблема, как представляется, что это вызывает уязвимость:

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

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

1
  1. Те же.

  2. Использование String.format для передачи статического значения является странным. Не делай этого.

  3. Не все отчеты о Findbugs - проблема. Findbugs могут сообщать «ложные срабатывания»."

Как было отмечено выше, использовать new File(a.getPath(), filename) добавить сегмент пути на другой путь. Это может также устранить проблему FindBugs.

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

  • Нет связанных вопросов^_^