删除安全代码扫描SCS 0018路径遍历警告

时间:2018-07-05 09:27:58

标签: c# warnings suppress-warnings path-traversal

https://security-code-scan.github.io/ 在构建期间会显示Visual Studio中的安全扫描SCS 0018警告。目前,我正在努力删除这些警告。我尝试了几个MSDN站点,但是没有运气。我也阅读了OWSAP,但它们与C#并没有明确的关系。请找到“路径遍历”警告的图像。 Path Traversal Warning Message

代码:

   public void Move(string sourceFileName, string destinationFileName)
    {

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

2 个答案:

答案 0 :(得分:1)

首先试试5.0.0版本,它的不可信输入跟踪功能更好,这种情况下可能不会给你警告。

如果它仍然给您警告,您需要正确验证或清理不受信任的参数。但是 SCS 不够智能,无法识别自定义验证函数,因此您需要将其添加到 configuration file 中,例如:

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

有关更多消毒剂示例,请参阅 the built-in configuration

如果您不想使用专用函数,而是内联对其进行验证,则另一个选项是 suppress the warning

答案 1 :(得分:0)

您应该阅读有关此警告的文档以了解问题并找到相关参考资料。

<块引用>

路径遍历攻击(也称为目录遍历)旨在访问存储在预期目录之外的文件和目录。变体或使用绝对文件路径,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码或配置和关键系统文件。

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

您的代码的问题在于您接受并使用了 destinationFileName 参数而没有进行任何类型的检查。

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

文档提供了建议(在使用参数之前检查无效的文件名字符并抛出异常)并且 .NET Core 提供了一种新类型 PhysicalFileProvider,可以防止路径遍历。

<块引用>

PhysicalFileProvider 提供对物理文件系统的访问。 PhysicalFileProvider 使用 System.IO.File 类型(用于物理提供程序)并将所有路径限定为一个目录及其子目录。此作用域可防止访问指定目录及其子目录之外的文件系统。

但是,我不知道 SCS 是否正确检测到这种类型的使用。