Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V5631. OWASP. Use of externally-controlled format string. Potentially tainted data is used as a format string.

30 Сен 2025

Анализатор обнаружил использование полученной из внешнего источника строки в качестве формата без предварительной проверки. В случае, если количество ячеек в строке формата и количество аргументов не совпадёт, это приведёт либо к выбросу исключения, либо к потере информации.

Рассмотрим пример:

static void Foo(string hostName, int port, params string[] args)
{
  using (TcpClient tcpConn = new TcpClient(hostName, port))
  {
    using (StreamReader sr = new StreamReader(tcpConn.GetStream()))
    {
      var format = sr.ReadLine();
      var data = ApplyFormat(format, args);
      ....
    }
  }
}

static string ApplyFormat(string format, string[] args)
{
  return string.Format(...., format, args);
}

В данном примере значение format получается по сети, после чего передаётся в 'ApplyFormat', где сразу же используется в качестве формата в методе string.Format. Так как перед этим не было выполнено никаких проверок на количество элементов формата {....} в строке, существует вероятность, что оно не совпадёт с количеством аргументов в args. Если количество элементов формата окажется меньше, то некоторые аргументы просто не будут вставлены в результат, а если больше — будет выброшено исключение.

Чтобы избежать потенциальных проблем, перед использованием строки формата следует выполнить её валидацию, например, с помощью регулярного выражения:

static bool TryApplyFormat(string format, string[] args, out string data)
{
  if (Regex.Matches(format, ....).Count == args.Length)
  {
    data = string.Format(format, args);
    return true;
  }

  data = null;
  return false;
}

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.).

Данная диагностика классифицируется как: