Veracode目录遍历问题c#

本文关键字:问题 遍历 Veracode | 更新日期: 2023-09-27 18:09:55

我有这个代码存储文件到服务器:

function void StoreFile(string inputFileName) {
   ...
   var extension = Path.GetExtension(inputFileName);
   if(extension == ".csv") {
       var fileName = string.Format("{0}_{1}{2}", Session.SessionID, new Guid(), extension);
       var dataFileServerPath = _documentService.getPath(fileName, UserProfile.UserName, UserProfile.SourceID);
       if(!string.IsNullOrEmpty(dataFileServerPath)) {
           try {
              using(FileStream dataFile = new FileStream(dataFileServerPath, FileMode.Create))  { .... }
           }
           cathc(Exception e) { ... }    
       }
    }    
    else {
        throw new NotSupportedFormatError();
    }
}

在Veracode分析之后,我得到FileStream dataFile = new FileStream(dataFileServerPath, FileMode.Create)行上的目录遍历问题

为什么我在那里得到这个问题,我已经检查了文件扩展名是否对我的情况有效,并在fileName中传递了该值。这是安全问题吗?如何解决这个问题?

_documentService.getPath只是从web附加路径。

Veracode目录遍历问题c#

根据你在这里发布的代码,这看起来像一个假阳性。

Veracode显然在跟踪inputFileName变量(我假设它包含未经验证的用户输入),并注意到它影响extension变量。由于您稍后将extension直接嵌入到文件名中,并读取指向的文件,Veracode发现恶意用户可能会在inputFileName中嵌入部分路径,然后更改目标文件的目录…

在这种情况下,Veracode忽略了您已经执行输入验证(extension == ".csv"检查)的事实,并且绝对地将输入的相关部分约束到严格的白名单中。

假设您的问题中没有其他相关的代码位丢失,则可以安全地将其标记为假阳性。

静态分析程序无法可靠地验证您实际上是在而不是使用用户输入。他们往往过于谨慎而犯错误,从而产生假阳性警告。