Внешний контроль над проблемой безопасности имени файла или пути

у меня есть код

File file = new File(fileName)

Это fileName я готовлю из других деталей. Однако я получаю

Внешний контроль имени файла или пути

ошибка, когда я отправляю свой код в инструмент сканирования безопасности Vera Code. Может кто-нибудь, пожалуйста, помогите мне, как решить эту проблему.


person user1782009    schedule 29.01.2013    source источник
comment
Не могли бы вы опубликовать содержимое имени файла?   -  person Guido    schedule 29.01.2013
comment
Это то, что я делаю с именем файла fileName= / + certificateId + + docTypeLongName + _ + IDGenerator.getFileId()+ extn;   -  person user1782009    schedule 29.01.2013
comment
Я предполагаю, что имя файла является именем файла UNIX.   -  person Guido    schedule 29.01.2013
comment
может ли быть так, что расширение имени файла указывает на стороннее приложение (т.е. оно зарегистрировано для работы со сторонним приложением) и потому что теперь вы хотите работать с ним вне этого стороннего приложения   -  person Guido    schedule 29.01.2013
comment
Меня интересует одна вещь: как это связано с CRLF/новой строкой?   -  person Andreas Fester    schedule 29.01.2013
comment
Нет extn - это тип файла. Например: если я загружаю документ Upload.doc, то имя файла будет выглядеть так: /58743364 package_20131295643666-850442.docx Таким образом, расширение здесь будет .docx   -  person user1782009    schedule 29.01.2013


Ответы (1)


Сообщенная проблема означает, что кто-то может изменить fileName извне, например. вводом данных пользователем или изменением файла конфигурации. См. также CWE-73: Внешний контроль имени файла или пути.

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

Вам нужно проверить, каков источник различных частей вашего fileName. Например, предположим, что пользователь может предоставить extn через ваш веб-интерфейс. Если вы используете пользовательский ввод в своем приложении без дополнительной проверки, пользователь может получить доступ к файлам, которые он не должен:

User input: extn="/../etc/passwd"

Resulting fileName: "/certificateId docTypeLongName_FileId/../etc/passwd"

Чтобы решить эту проблему, вы можете использовать проверку, чтобы убедиться, что ввод не содержит определенных строк, таких как .., или вы можете использовать белые списки (если возможный диапазон ввода ограничен). чтобы убедиться, что представлены только хорошо известные значения.

person Andreas Fester    schedule 29.01.2013
comment
Нужно ли проверять только .., чтобы устранить этот недостаток? - person user1782009; 29.01.2013
comment
В вашем конкретном случае этого может быть достаточно, но, пожалуйста, проверьте cwe.mitre.org/data /definitions/73.html. Этап реализации дает хороший обзор стратегий реализации. Имейте в виду, что злоумышленники изобретательны... - person Andreas Fester; 29.01.2013