Устранение проблемы Veracode CWE-73: внешний контроль имени файла или пути к приложению MVC

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


person Jamik    schedule 13.04.2020    source источник


Ответы (1)


В Veracode есть статья базы знаний, на которую ссылается средство просмотра дефектов, в которой даны некоторые советы по устранению:

https://downloads.veracode.com/securityscan/cwe/v5/net/73.html

person Jon Janego    schedule 14.04.2020