Сообщение CAT.NET «Очистите путь к файлу перед передачей его в процедуры файловой системы»

StackOverflow https://stackoverflow.com/questions/1984426

Вопрос

Я анализирую свой код (C#, настольное приложение) с помощью анализа кода CAT.NET и получаю сообщение «Очистите путь к файлу перед его передачей в процедуры файловой системы» при работе с именами файлов.Чего я не понимаю, так это того, что для обеспечения корректности имени файла я использую:

void SomeMethod(String filename)
{
    filename = System.IO.Path.GetFullPath(filename);
    // ... Do stuff
}

Разве это не «волшебное решение» для решения проблем с неверными именами файлов?Я читал что-то подобное здесь (первый ответ), но в моем случае я имею дело только с локальными файлами, ну что-то очень простое, так что...

Так почему же я получаю это сообщение и как избежать его получения?

Это было полезно?

Решение

Я знаю, что это старый вопрос, но я только что столкнулся с чем-то полезным, особенно связанным с сообщением об ошибке CAT.Net.

В Сообщение блога о правилах потока данных CAT.Net, они могут сказать следующее о FileCanonicalizationRule:

Описание

Пользовательский ввод, используемый в процедурах обработки файлов, потенциально может привести к уязвимости канонизации файла.Код особенно восприимчив к вопросам канонизации, если он принимает какие -либо решения на основе имени ресурса, который передается в программу в качестве входных данных.Файлы, пути и URL -адреса - это типы ресурсов, которые уязвимы для канонизации, потому что в каждом случае существует много разных способов представления одинакового имени.

Разрешение

Очистите путь к файлу перед передачей его процедурам обработки файлов.Используйте path.getinvalidfilenamechars или path.getinvalidpathchars, чтобы получить неверные символы и удалить их с ввода.Больше информации можно найти в http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx.

Итак, они предлагают вам использовать Path.GetInvalidFileNameChars и Path.GetInvalidPathChars для проверки ваших путей.

Обратите внимание, что их предложение состоит в том, чтобы удалять недопустимые символы.Хотя это действительно сделает путь действительным, это может привести к неожиданному поведению пользователя.Как и комментарии к этот вопрос/ответ предполагают, что, вероятно, лучше выйти раньше и сообщить пользователю, что его путь недействителен, а не делать что-то неожиданное с введенными данными (например, удалять неверные символы и использовать измененную версию).

Другие советы

Если имя файла исходит от пользователя, оно может быть чем-то вроде «../../../../etc/passwd» — сообщение об ошибке говорит вам, что вам необходимо очистить его, чтобы он не смог получить в каталоги это не положено.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top