Предупреждение C6277
Имя приложения NULL с неквотируемым путем при вызове "function-name": приводит к уязвимости безопасности, если путь содержит пробелы
Это предупреждение указывает, что параметр имени приложения имеет значение NULL и может содержать пробелы в имени исполняемого пути.
Замечания
Если имя исполняемого файла не является полным, скорее всего, возникнет проблема с безопасностью. Злоумышленник может вставить исполняемый файл rogue с тем же именем ранее в пути. Чтобы исправить это предупреждение, можно указать имя приложения вместо передачи null. Кроме того, если вы передаете значение NULL для имени приложения, используйте кавычки вокруг пути исполняемого файла.
Имя анализа кода: CREATEPROCESS_ESCAPE
Пример
Следующий пример кода создает предупреждение C6277. Предупреждение вызвано именем приложения NULL и именем исполняемого пути с пробелом. Из-за того, как функция анализирует пробелы, существует риск выполнения другого исполняемого файла. Дополнительные сведения см. в разделе CreateProcessA
.
#include <windows.h>
#include <stdio.h>
void f_defective()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"C:\\Program Files\\MyApp",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Чтобы устранить это предупреждение, заключите в кавычки путь к исполняемому файлу, как показано в следующем примере:
#include <windows.h>
#include <stdio.h>
void f ()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"\"C:\\Program Files\\MyApp.exe\"",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по