Avviso C6277
Nome applicazione NULL con un percorso senza virgoole nella chiamata a 'function-name': restituisce una vulnerabilità di sicurezza se il percorso contiene spazi
Questo avviso indica che il parametro del nome dell'applicazione è Null e che potrebbero essere presenti spazi nel nome del percorso eseguibile.
Osservazioni:
A meno che il nome eseguibile non sia completo, è probabile che si verifichi un problema di sicurezza. Un utente malintenzionato potrebbe inserire un eseguibile non autorizzato con lo stesso nome precedente nel percorso. Per correggere questo avviso, è possibile specificare il nome dell'applicazione anziché passare null. In alternativa, se si passa null per il nome dell'applicazione, usare le virgolette intorno al percorso eseguibile.
Nome dell'analisi del codice: CREATEPROCESS_ESCAPE
Esempio
Il codice di esempio seguente genera l'avviso C6277. L'avviso è causato dal nome dell'applicazione NULL e dal nome del percorso eseguibile con uno spazio. A causa del modo in cui la funzione analizza gli spazi, è possibile che venga eseguito un file eseguibile diverso. Per ulteriori informazioni, vedere 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 );
}
Per risolvere il problema, racchiudere il percorso dell'eseguibile tra virgolette, come riportato nell'esempio seguente:
#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 );
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per