Veracode目录遍历问题c#

时间:2015-08-25 13:15:52

标签: c# asp.net security veracode

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

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();
    }
}

Aftrer Veracode分析我在FileStream dataFile = new FileStream(dataFileServerPath, FileMode.Create)

行上获得了目录遍历问题

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

_documentService.getPath只是为特定用户添加web.config和filename的路径,它与用户输入无关。

2 个答案:

答案 0 :(得分:5)

根据您在此处发布的代码,这看起来像是误报。

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

在这种情况下,Veracode错过了您已经执行输入验证(extension == ".csv"检查)的事实,并且绝对将输入的相关部分限制为紧密白名单。

假设您的问题中没有其他相关的代码缺失,那么将其标记为误报是安全的。

答案 1 :(得分:3)

静态分析器无法使用用户输入可靠地验证您实际上。他们倾向于过于谨慎,从而产生误报警告。