c++系统调用安全问题



我开发了一个在Windows和Linux下使用的c++ CGI应用程序。它必须启动另一个应用程序。目前我正在使用一个系统调用:

system("anotherApp.exe -arguments");

对于这个调用,我需要在windows上执行cmd.exe的权限,因为系统调用会启动一个shell。这是一个安全问题,因为我的应用程序是一个CGI应用程序,并在web服务器上使用。

有没有另一种不启动新外壳就调用应用程序的可能性?

您可以使用CreateProcess并使用该命令设置安全权限。您还可以模拟一个受限制的用户,以确保您所调用的进程只具有您赋予它的权限。

System()启动控制台窗口并在该控制台窗口中运行程序。

popen()运行没有控制台窗口的程序,并将控制台输出重定向到管道。

CreateProcess()只是启动程序。你传递一个flags参数,告诉它如何处理控制台。它还允许程序以不同于父程序的权限运行。

如果您没有对cmd.exe的权限,那么system()将退出菜单。

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

最新更新