Решить Veracode CWE-73: приложение "Внешний контроль имени файла или пути" MVC - PullRequest
0 голосов
/ 13 апреля 2020

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

1 Ответ

0 голосов
/ 14 апреля 2020

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

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

...