Veracode目录遍历问题c#
Veracode directory traversal Issue c#
我有将文件存储到服务器的代码:
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)
上遇到目录遍历问题
为什么我会遇到这个问题,我已经检查了文件扩展名是否对我的情况有效,并在文件名中传递了该值。这是安全问题吗?如何解决?
_documentService.getPath
只是附加来自 web.config 的路径和特定用户的文件名,它与用户输入无关。
根据您在此处发布的代码,这看起来像是误报。
Veracode 显然在跟踪 inputFileName
变量(我假设它包含未经验证的用户输入),并指出它会影响 extension
变量。由于您稍后将 extension
直接嵌入到文件名中,并读取指向的文件,Veracode 发现恶意用户可能会在 inputFileName 中嵌入部分路径,然后更改目标文件的目录。 ..
在这种情况下,Veracode 忽略了您已经执行输入验证(extension == ".csv"
检查)这一事实,并将输入的相关部分绝对限制在严格的白名单中。
假设您的问题中没有遗漏其他相关代码,可以安全地将其标记为误报。
静态分析器无法可靠地验证您实际上没有使用用户输入。他们往往过于谨慎,从而产生误报警告。
我有将文件存储到服务器的代码:
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)
为什么我会遇到这个问题,我已经检查了文件扩展名是否对我的情况有效,并在文件名中传递了该值。这是安全问题吗?如何解决?
_documentService.getPath
只是附加来自 web.config 的路径和特定用户的文件名,它与用户输入无关。
根据您在此处发布的代码,这看起来像是误报。
Veracode 显然在跟踪 inputFileName
变量(我假设它包含未经验证的用户输入),并指出它会影响 extension
变量。由于您稍后将 extension
直接嵌入到文件名中,并读取指向的文件,Veracode 发现恶意用户可能会在 inputFileName 中嵌入部分路径,然后更改目标文件的目录。 ..
在这种情况下,Veracode 忽略了您已经执行输入验证(extension == ".csv"
检查)这一事实,并将输入的相关部分绝对限制在严格的白名单中。
假设您的问题中没有遗漏其他相关代码,可以安全地将其标记为误报。
静态分析器无法可靠地验证您实际上没有使用用户输入。他们往往过于谨慎,从而产生误报警告。