ファイルをサーバーに保存する次のコードがあります。
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とファイル名からのパスを追加するだけで、ユーザー入力とは関係ありません。