Sdílet prostřednictvím


C6277

warning C6277: NULL application name with an unquoted path in call to <function>: results in a security vulnerability if the path contains spaces

Toto upozornění označuje, že aplikace parametr name má hodnotu null a může být mezery v názvu cesta ke spustitelnému souboru.V takovém případě není-li název spustitelného souboru je "plně kvalifikovaný," je pravděpodobné, že se jednat o problém zabezpečení.Uživatel se zlými úmysly může vložit do neautorizovaných serverů spustitelný soubor se stejným názvem dříve v cestě.Chcete-li toto upozornění, můžete určit název aplikace namísto předání hodnoty null nebo Pokud předáte hodnotu null pro název aplikace, použijte cesta ke spustitelnému souboru do uvozovek.

Příklad

Následující vzorový kód generuje upozornění, protože parametr name aplikace má hodnotu null a název cesta ke spustitelnému souboru obsahuje mezery v existuje riziko, že jiný spustitelný soubor, může být spuštěn z důvodu způsobu funkce analyzuje mezery.Další informace naleznete v tématu 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 );
}

Chcete-li toto upozornění, použijte cesta ke spustitelnému souboru v uvozovkách, jak je znázorněno v následujícím příkladu:

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