C++:如何为安全系统调用转义用户输入?

aug*_*tin 4 c++ linux security escaping

在Linux平台上,我有C++代码,如下所示:

// ...
std::string myDir;
myDir = argv[1]; // myDir is initialized using user input from the command line.
std::string command;
command = "mkdir " + myDir;
if (system(command.c_str()) != 0) {
   return 1;
}
// continue....
Run Code Online (Sandbox Code Playgroud)
  • 将用户输入传递给system()调用安全吗?
  • 用户输入是否应该被转义/消毒?
  • 怎么样?
  • 上述代码如何被用于恶意目的?

谢谢.

Mat*_*hen 10

只是不要使用system.喜欢execl.

execl ("/bin/mkdir", "mkdir", myDir, (char *)0);
Run Code Online (Sandbox Code Playgroud)

这样,myDir总是作为单个参数传递给mkdir,并且不涉及shell.请注意,fork如果使用此方法,则需要.

但如果这不仅仅是一个例子,你应该使用mkdirC函数:

mkdir(myDir, someMode);
Run Code Online (Sandbox Code Playgroud)