次の方法で共有


C6277

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

この警告は、アプリケーション名パラメーターが null であり、かつ実行可能ファイルのパス名にスペースが含まれている可能性があることを示します。この場合、実行可能ファイル名が「完全修飾」でないと、セキュリティ上の問題が生じる可能性が高くなります。悪意のあるユーザーが同じ名前の不正な実行可能ファイルをパスの前の方に挿入する可能性があります。この警告を解決するには、null を渡す代わりにアプリケーション名を指定しす。あるいは、アプリケーション名として null を渡すのであれば、実行可能ファイルのパスの前後に引用符を付けてください。

使用例

次のサンプル コードでは、アプリケーション名パラメーターが null であり、かつ実行可能ファイルのパスにスペースが含まれているため、この警告が生成されます。関数がスペースを解析する方法が原因で、異なる実行可能ファイルが実行される危険性があります。詳細については、「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 );
}

この警告を解決するには、次の例に示すとおり、実行可能ファイルのパスの前後に引用符を付けてください。

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