В моем приложении есть функция, для которой я получаю ошибку CWE-73 от сканирования Veracode. Эта функция используется для обхода указанного c пути и получения содержимого одного файла и списка файлов в папке:
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, но ни у одного из них нет правильных объяснений.