Удалить код проверки безопасности SCS 0018 Предупреждения о прохождении пути

https://security-code-scan.github.io/ Сканирование безопасности SCS 0018 Предупреждения в Visual Studio отображаются во время сборки. В настоящее время я работаю над этими предупреждениями, чтобы их убрали. Я пробовал несколько сайтов MSDN, но не повезло. Я также читал OWSAP, но они не имеют четкого отношения к C#. Пожалуйста, найдите изображение предупреждения прохождения пути. Предупреждение о прохождении пути

Код:

   public void Move(string sourceFileName, string destinationFileName)
    {

        try
        {
            System.IO.File.Move(sourceFileName,destinationFileName);
        }
        catch (System.Exception e)
        {
        }
   }

2 ответа

Прежде всего, попробуйте версию 5.0.0, в которой лучше отслеживается ненадежный ввод и в этом случае может не выдаваться предупреждение.

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

      Sanitizers:
  - Type: NamespaceAndClassName
    TaintTypes:
      - SCS0018
    Methods:
      - Name: SanitizePath

Дополнительные примеры дезинфицирующих средств см. во встроенной конфигурации .

Если вместо этого вы предпочитаете не иметь выделенной функции, а проверять ее встроенную, другой вариант — подавить предупреждение .

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

Атака обхода пути (также известная как обход каталога) направлена ​​на доступ к файлам и каталогам, которые хранятся за пределами ожидаемого каталога. используя абсолютные пути к файлам, можно получить доступ к произвольным файлам и каталогам, хранящимся в файловой системе, включая исходный код приложения или конфигурацию и важные системные файлы.

https://security-code-scan.github.io/#SCS0018

Проблема с вашим кодом в том, что вы принимаете и используете destinationFileNameпараметр без какой-либо проверки.

      System.IO.File.Move(sourceFileName,destinationFileName);

В документации содержится рекомендация (проверка недопустимых символов имени файла и создание исключения перед использованием параметра), а .NET Core предоставляет новый тип PhysicalFileProvider, который может защитить от обхода пути.

PhysicalFileProvider обеспечивает доступ к физической файловой системе. PhysicalFileProvider использует тип System.IO.File (для физического поставщика) и охватывает все пути к каталогу и его дочерним элементам. Эта область действия предотвращает доступ к файловой системе за пределами указанного каталога и его дочерних элементов.

Но я не знаю, правильно ли SCS определяет использование этого типа.

Другие вопросы по тегам