Avertissement C6277
Nom de l’application NULL avec un chemin d’accès non cité dans l’appel à « nom-fonction » : entraîne une vulnérabilité de sécurité si le chemin contient des espaces
Cet avertissement indique que le paramètre nom de l’application a la valeur Null et qu’il peut y avoir des espaces dans le nom du chemin d’accès exécutable.
Notes
Sauf si le nom exécutable est complet, il est probable qu’il y ait un problème de sécurité. Un utilisateur malveillant peut insérer un exécutable non autorisé portant le même nom précédemment dans le chemin d’accès. Pour corriger cet avertissement, vous pouvez spécifier le nom de l’application au lieu de passer null. Sinon, si vous passez null pour le nom de l’application, utilisez des guillemets autour du chemin d’accès exécutable.
Nom de l’analyse du code : CREATEPROCESS_ESCAPE
Exemple
L’exemple de code suivant génère l’avertissement C6277. L’avertissement est dû au nom de l’application NULL et à partir du nom du chemin d’accès exécutable ayant un espace. En raison de la façon dont la fonction analyse les espaces, il existe un risque qu’un autre exécutable puisse être exécuté. Pour plus d’informations, consultez 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 );
}
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 );
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour