Удалить код проверки безопасности 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 определяет использование этого типа.