c ++系统调用安全性问题

| 我开发了在Windows和Linux下使用的c ++ CGI应用程序。 它必须启动另一个应用程序。目前,我正在使用系统调用:
system(\"anotherApp.exe -arguments\");
对于该调用,我需要Windows上cmd.exe的执行权限,因为系统调用会启动外壳程序。这是一个安全问题,因为我的应用程序是CGI应用程序,并且在网络服务器上使用。 是否有另一个无需启动新外壳即可调用应用程序的可能性?     
已邀请:
System()启动控制台窗口,并在该控制台窗口中运行程序。 popen()在没有控制台窗口的情况下运行该程序,并将控制台输出重定向到管道。 CreateProcess()仅启动程序。您传递一个flags参数,告诉它如何使用控制台。它还允许程序以对父程序不同的权限运行。 如果您没有cmd.exe的权限,则system()不在菜单中。 只要程序不需要写入stdout或stderr,popen()可能会起作用,因为那样会丢失。 您最好是这样写:
bool RunProgram(const std::string &sProgram, bool bWaitForFinish)
{
#if defined(Win32)
    // Launch with CreateProcess()
    // wait if required
#else
    // launch with fork()/exec() or even system()
    // wait if required
#endif
    return error_status;
}
    
您可以使用CreateProcess并使用该命令设置安全性权限。另外,您可以模拟受限用户,以确保您正在调用的进程仅具有您赋予它的权限。     

要回复问题请先登录注册