Aracılığıyla paylaş


C6277

uyarı C6277: NULL uygulama adı tırnak işareti olmayan bir yolla <işlev> çağrı yapmak: yol boşluk içeriyorsa, bir güvenlik açığı oluşur

Bu uyarı uygulama adı parametresi boş ve yürütülebilir yol adında boşluk olabileceğini gösterir.Bu durumda, yürütülebilir adı "tam nitelikli" olmadıkça, büyük olasılıkla bir güvenlik problemi olacaktır.Kötü niyetli bir kullanıcı o yola aynı isimde kötü niyetli bir yürütülebilir dosya ekleyebilir.Bu uyarıyı düzeltmek için, uygulama adını boş göndermek veya boş uygulama adını kullanmak istiyorsanız yürütülebilir yolunu tırnak işaretleri arasına yazarak uygulama adını tanımlayabilirsiniz.

Örnek

Aşağıdaki örnek kod uygulama adı boş olduğunda bu uyarıyı üretir ve yürütülebilir yol adında boşluk vardır; farklı bir yürütülebilir boşlukları ayırma yönteminden dolayı çalıştırabilir ve bu bir risk oluşturur.Daha fazla bilgi için bkz: 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 );
}

Bu uyarıyı düzeltmek için, aşağıdaki örnekte olduğu gibi yürütülebilir yolunu tırnaklar arasında kullanın:

#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 );
}