我有这个将文件存储到服务器的代码:
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.xml 中传递了该值。这是安全问题吗?如何解决这个问题?
_documentService.getPath
只是为特定用户附加来自 web.config 的路径和文件名,它与用户输入无关。