警告 C6277
'function-name' の呼び出しで引用符で囲まれていないパスを持つ NULL アプリケーション名: パスにスペースが含まれている場合、セキュリティの脆弱性が発生します
この警告は、アプリケーション名パラメーターが null であり、実行可能パス名にスペースがある可能性があることを示します。
解説
実行可能ファイル名が完全修飾されていない限り、セキュリティ上の問題が発生する可能性があります。 悪意のあるユーザーは、パスの前に同じ名前の不正な実行可能ファイルを挿入する可能性があります。 この警告を修正するには、null を渡す代わりにアプリケーション名を指定します。 または、アプリケーション名に null を渡す場合は、実行可能パスを引用符で囲みます。
コード分析名: CREATEPROCESS_ESCAPE
例
次のサンプル コードでは、警告 C6277 が生成されます。 この警告は、NULL アプリケーション名と、スペースを持つ実行可能パス名から発生します。 関数がスペースを解析する方法により、別の実行可能ファイルが実行されるリスクがあります。 詳細については、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 );
}
この警告を解決するには、次の例に示すとおり、実行可能ファイルのパスの前後に引用符を付けてください。
#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 );
}
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示