В моем приложении есть функция, для которой я получаю ошибку CWE-73 из сканирования Veracode. Эта функция используется для прохождения определенного пути и получения содержимого одного файла и списка файлов в папке:
private LogFile GetLogFileByName(string logFileName)
{
string fileContents = string.Empty;
string path = this.GetBasePath + "/Logs/" + logFileName;
if (System.IO.File.Exists(path))
{
using (FileStream stream = System.IO.File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader reader = new StreamReader(stream))
{
fileContents = reader.ReadToEnd();
}
}
}
return new LogFile {FileContents = fileContents, LogFileName = logFileName, LogFileNames = GetNames()};
}
Я искал возможные варианты устранения этого недостатка, и одним из них был «Внесение в белый список шаблонов», который был применим для меня, поэтому я переписал функцию следующим образом:
private LogFile GetLogFileByName(string logFileName)
{
string fileContents = string.Empty;
var regex = new System.Text.RegularExpressions.Regex(@"^log\.common\.txt(\d{4}.\d{2}.\d{2})?$");
if (regex.IsMatch(logFileName))
{
string path = this.GetBasePath + "/Logs/" + logFileName;
if (System.IO.File.Exists(path))
{
using (FileStream stream = System.IO.File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader reader = new StreamReader(stream))
{
fileContents = reader.ReadToEnd();
}
}
}
}
else {
return new LogFile();
}
return new LogFile {FileContents = fileContents, LogFileName = logFileName, LogFileNames = GetNames()};
}
Где я использую регулярное выражение, чтобы проверить, все ли синтаксически правильно. Тем не менее, проблема все еще появляется. Есть идеи, как это можно решить? Я просмотрел пару сообщений в SO, но ни один из них, похоже, не имеет правильного объяснения.