c ++系统调用安全问题

时间:2011-04-15 12:09:12

标签: c++ cgi rights

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

system("anotherApp.exe -arguments");

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

在没有启动新shell的情况下调用应用程序是否还有其他可能性?

2 个答案:

答案 0 :(得分:2)

您可以使用CreateProcess并使用该命令设置安全权限。您还可以模拟受限用户,以确保您调用的进程仅具有您为其提供的权限。

答案 1 :(得分:1)

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

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

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

如果您没有cmd.exe的权限,则系统()不在菜单中。

只要程序不需要写入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;
}