c++系统调用安全问题
c++ system call security issue
我开发了一个在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;
}
相关文章:
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 使用安全零内存新建/删除时出现问题
- 在C++中,这个Eigen::张量的声明是安全的,还是有缺陷的?我应该为它提交一个问题吗
- 编译器优化是否解决了线程安全问题
- CreateProcess API的安全问题
- GSL螺纹安全问题
- 为什么我们需要 RAII 来解决异常安全问题
- 关于 swap() 操作的异常安全 - 这有什么问题?
- 此 strncpy 存在哪些安全问题
- 在机器上运行时,编译的源代码(C++、Java 等)涉及哪些安全问题
- 创建表示安全ORrable标志的类时出现问题
- 实现应用程序网络协议的安全问题
- 使用"for(auto&e : cont)"安全吗?矢量有什么问题<bool>?
- C++常见问题解答的不安全宏的解释?
- 在线编译c/c++[安全问题]
- 创建读取面向互联网的套接字的守护进程有什么安全问题?
- 线程安全问题
- 关于QMap线程安全的问题
- c++系统调用安全问题
- 我的简单线程安全堆栈有什么问题?