C6277
warning C6277: NULL application name with an unquoted path in call to <function>: results in a security vulnerability if the path contains spaces
Cet avertissement indique que le paramètre de nom d'application est null et il peut y avoir des espaces dans le nom de chemin d'accès au fichier exécutable.Dans ce cas, sauf si le nom du fichier exécutable est « complet », un problème de sécurité se pose probablement.Un utilisateur malveillant peut insérer un exécutable non autorisé portant le même nom plus haut dans le chemin d'accès.Pour corriger cet avertissement, vous pouvez spécifier le nom de l'application au lieu de passer une valeur null ou, si vous passez la valeur null pour le nom de l'application, vous pouvez utiliser des guillemets autour du chemin d'accès au fichier exécutable.
Exemple
L'exemple de code suivant génère cet avertissement, car le paramètre de nom d'application est null et le nom de chemin d'accès au fichier exécutable contient un espace ; un fichier exécutable différent risque d'être exécuté en raison de la façon dont la fonction analyse les espaces.Pour plus d'informations, voir 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 );
}
Pour corriger cet avertissement, utilisez des guillemets autour du chemin d'accès au fichier exécutable, comme illustré dans l'exemple suivant :
#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 );
}