C6277
Ostrzeżenie C6277: nazwa aplikacji NULL zawierająca ścieżkę bez cudzysłowów, w wywołaniu <function>: wynikiem tego są luki w zabezpieczeniach, jeżeli ścieżka zawiera spacje
To ostrzeżenie wskazuje, że parametr nazwy aplikacji ma wartość null a nazwa ścieżki pliku wykonywalnego może zawierać spacje.W tym przypadku, jeżeli nazwa pliku wykonywalnego nie jest "w pełni kwalifikowana", jest mało prawdopodobne, że występuje problem zabezpieczeń.Złośliwy użytkownik mógł wstawić wcześniej w ścieżce, nieautoryzowany plik wykonywalny o tej samej nazwie.Aby poprawić to ostrzeżenie, można określić nazwę aplikacji zamiast przekazywania wartości null lub jeśli nie jest przekazywana wartość null dla nazwy aplikacji, należy użyć znaków cudzysłowu wokół ścieżki pliku wykonywalnego.
Przykład
Następujący przykładowy kod generuje ostrzeżenie, ponieważ parametr nazwy aplikacji ma wartość null, a nazwa ścieżki pliku wykonywalnego zawiera spację; istnieje ryzyko, że inny plik wykonywalny może zostać uruchomiony, z powodu sposobu, w jaki funkcja analizuje spacje.Aby uzyskać więcej informacji, zobacz CreateProcess.
#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 );
}
Aby poprawić to ostrzeżenie, użyj znaków cudzysłowu wokół ścieżki pliku wykonywalnego, jak pokazano w następującym przykładzie:
#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 );
}