首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Veracode目录遍历问题c#

Veracode目录遍历问题c#
EN

Stack Overflow用户
提问于 2015-08-25 13:15:52
回答 2查看 5.9K关注 0票数 3

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

代码语言:javascript
复制
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.config和文件名的路径,它与用户输入无关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-25 13:21:59

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

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

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

假设您的问题中没有其他相关代码缺失,这是安全的标记为假阳性。

票数 5
EN

Stack Overflow用户

发布于 2015-08-25 13:22:46

静态分析器没有真正的方法来可靠地验证您实际上没有使用用户输入。他们往往错误地站在过于谨慎的立场,从而产生假阳性警告。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32205056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档